专栏首页python3Selenium&PhantomJS实战二:爬取漫画

Selenium&PhantomJS实战二:爬取漫画

准备环境

一般来说在线看漫画的网站都会使用JavaScript来返回页面,打开百度搜索在线漫画,如下图:

目标网站: http://www.1kkk.com 极速漫画,选取一个漫画爬取 http://www.1kkk.com/manhua1963/

目标分析:

爬虫代码:

创建一个GetComic.py文件,代码如下:

from selenium import webdriver
from mylog import MyLog as mylog
import os
import time


class GetComic(object):
    def __init__(self):
        self.startUrl = 'http://www.1kkk.com/ch223-85528/'
        self.log = mylog()
        self.browser = self.getBrowser()
        self.saveCartoon(self.browser)

    def getBrowser(self):
        try:
            browser = webdriver.PhantomJS()
            browser.get(self.startUrl)
            browser.implicitly_wait(20)
        except Exception as e:
            self.log.error('open the %s failed : %s' % (self.startUrl, e))
        else:
            return browser

    def saveCartoon(self, browser):
        cartoonTitle = browser.title.split('_')[0]
        self.createDir(cartoonTitle)
        os.chdir(cartoonTitle)
        sumPage = int(browser.find_element_by_xpath("//div[@class='chapterpager']/a[last()]").text)
        i = 1
        while i <= sumPage:
            imgName = str(i) + '.png'
            browser.get_screenshot_as_file(imgName)
            self.log.info('save img %s' % imgName)
            i += 1
            NextTag = browser.find_element_by_partial_link_text("下一页").click()
            browser.implicitly_wait(30)
            time.sleep(10)
        self.log.info('save img success')
        exit()

    def createDir(self, dirName):
        if os.path.exists(dirName):
            self.log.error('create directory %s failed, have a sane name file or directory' % dirName)
        else:
            try:
                os.makedirs(dirName)
            except Exception as e:
                self.log.error('create directory %s failed : %s' % (dirName, e))
            else:
                self.log.info('create directory %s success' % dirName)


if __name__ == '__main__':
    ST = GetComic()

mylog.py日志文件代码如下:

import logging
import getpass
import sys


# 定义MyLog类
class MyLog(object):
    def __init__(self):
        self.user = getpass.getuser()  # 获取用户
        self.logger = logging.getLogger(self.user)
        self.logger.setLevel(logging.DEBUG)

        # 日志文件名
        self.logfile = sys.argv[0][0:-3] + '.log'  # 动态获取调用文件的名字
        self.formatter = logging.Formatter('%(asctime)-12s %(levelname)-8s %(message)-12s\r\n')

        # 日志显示到屏幕上并输出到日志文件内
        self.logHand = logging.FileHandler(self.logfile, encoding='utf-8')
        self.logHand.setFormatter(self.formatter)
        self.logHand.setLevel(logging.DEBUG)

        self.logHandSt = logging.StreamHandler()
        self.logHandSt.setFormatter(self.formatter)
        self.logHandSt.setLevel(logging.DEBUG)

        self.logger.addHandler(self.logHand)
        self.logger.addHandler(self.logHandSt)

    # 日志的5个级别对应以下的5个函数
    def debug(self, msg):
        self.logger.debug(msg)

    def info(self, msg):
        self.logger.info(msg)

    def warn(self, msg):
        self.logger.warn(msg)

    def error(self, msg):
        self.logger.error(msg)

    def critical(self, msg):
        self.logger.critical(msg)


if __name__ == '__main__':
    mylog = MyLog()
    mylog.debug(u"I'm debug 中文测试")
    mylog.info(u"I'm info 中文测试")
    mylog.warn(u"I'm warn 中文测试")
    mylog.error(u"I'm error 中文测试")
    mylog.critical(u"I'm critical 中文测试")

运行主程序GetComic.py

Pycharm运行结果

生成目录和下载图片

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PyQt5--QProgressBar

    py3study
  • python 面向对象(成员)

            特点: 在声明的时候. 需要给出self, self必须放在第一个位置

    py3study
  • python入门之tkinter实现简

    这里class MyHtmlParser继承了HTMLParser,根据这个模板你可以添加你自己需要从网页上获取的内容了,假设你的网页中有标签p,试一试新增一个...

    py3study
  • Pyqt 主窗口(QMainWindow)简介

    下面我写了一个简单的例子,只实现了极少数的功能,仅供参考。后续会详细介绍主窗口(QMainWindow)程序各个部分的写法。推荐在浏览器中打开并横屏查看代码。

    用户6021899
  • 利用Python编写一个行业专用的小计算器

    前言:本文讲述的是如何利用python编程制作一个适用于指定行业的计算器,方便计算结果,涵盖的知识点由Python编写GUI界面程序,利用爬虫采集实时的汇率数据...

    用户7886150
  • python项目练习十:DIY街机游戏

    终于来到了最后一个项目,看看前面的那些练习,也算是熟悉了python的基本操作,也知道python能干哪些事情,最后一个项目相比于以前的稍微复杂些,但是任何一个...

    the5fire
  • vn.py源码解读(一、环境配置与回测初试)

            近来忙于毕业找工作,也不知道能不能继续在量化界混了。周末比较闲,抽空研究了一下vn.py。有人说,为什么学那么多的回测平台呀。其实我个人觉得,做...

    钱塘小甲子
  • python的tkinter编程(九)Text多行文本框的详细解读

    一天不写程序难受
  • python的tkinter编程(八)Entry组件的详细介绍,以登录界面作为讲解

    写一个按钮,绑定一个方法,当点击这个按钮的时候,就会执行这个方法,在这个方法里面 获取到对应的你输入的值,将获取到的值传到数据库里面进行比对,失败给一个返回的...

    一天不写程序难受
  • vn.py源码解读(四、主引擎代码分析----初始化函数)

            vnpy有一个叫做主引擎的东西,在三里面也说过,个人觉得这个应该是一个运行框架的东西,不应该叫做引擎,不过没关系,名字而已嘛。这一篇呢主要就是分...

    钱塘小甲子

扫码关注云+社区

领取腾讯云代金券