梦幻嘟嘟 发表于 2019-11-26 11:26

Selenium&PhantomJS实战--漫画下载系列

python--Selenium&PhantomJS实战
准备工作
https://static.52pojie.cn/static/image/hrline/5.gif


1.python3开发环境
2.相应的python包:
from selenium import webdriver
from myLog import MyLog as mylog
import os
import time
import sys
from PIL import Image

selenium 和 PIL 分别通过cmd输入下方命令安装
python -m pip install -U selenium
pip install pillow
mylog是日志文件,其他都是自带的包
3.开发环境:这里使用的是pycharm
4.谷歌浏览器:用于抓包分析(其他浏览器也可以)
5.安装PhantomJS,百度教程一堆,也很简单


分析网页结构
https://static.52pojie.cn/static/image/hrline/5.gif

网站是: http://www.1kkk.com/   搜索引擎前几的网站,应该没啥问题

这个网站的动漫有收费,有免费,这里只能爬免费的动漫
{:17_1055:}

然后随便在首页选择一个动漫,这里选的是宠物天王:http://www.1kkk.com/ch1-767938/


这里稍稍看一下,每个页面就一张图片,下一页,下一章之类的没有直接url,但是可以通过规律直接生成,不过需要获取每章的新链接,稍稍有点麻烦

所以就直接使用selenium直接模拟浏览器动作点击下一页就好啦

完整代码
https://static.52pojie.cn/static/image/hrline/5.gif

创建一个新项目,任意名字.py
# selenium 之1kkk漫画获取
#!/usr/bin/evn python3
# #-*- coding: utf-8 -*

from selenium import webdriver
from myLog import MyLog as mylog
import os
import time
import sys
from PIL import Image

class GetCartoon(object):
    def __init__(self):
      self.startUrl = 'http://www.1kkk.com/ch1-767938/'# 想更换漫画修改这里
      self.log = mylog()
      self.browser = self.getBrowser()
      self.saveCartoon(self.browser)
      self.browser.quit()
      self.sumPage = 1

    def getBrowser(self):
      browser = webdriver.PhantomJS()
      try:
            browser.get(self.startUrl)
      exceptException as e:
            mylog.error('open the %s faild, exit the script...' % self.startUrl)
            sys.exit(-1)
      browser.implicitly_wait(20)
      return browser

    def saveCartoon(self, browser):
      cartoonTitle = browser.title.split('_')
      # 命名文件夹
      self.creatDir(cartoonTitle)
      os.chdir(cartoonTitle)
      self.sumPage = int(self.browser.find_element_by_xpath('//div[@id="chapterpager"]/a').text)
      i = 1
      b = 0
      while 1:
            if self.sumPage >= i:
                imgName = str(i + b) + '.png'
                # 截屏并命名成imgName
                browser.get_screenshot_as_file(imgName)
                # 剪切图片操作
                img =Image.open(imgName)
                cropped = img.crop((0, 100, 1200, 2100))
                cropped.save(imgName)
                self.log.info('save img %s' % imgName)
                i += 1
                NextTag = browser.find_elements_by_link_text('下一页')
                NextTag.click()
                time.sleep(5)
            else:
                NextTag = browser.find_elements_by_link_text('下一章')
                NextTag.click()
                time.sleep(5)
                i = 1
                b = b + self.sumPage
                self.log.info('save img sccess')


    def creatDir(self, dirName):
      if os.path.exists(dirName):
            self.log.info('create directory %s failed, have a same name file ' % dirName)
      else:
            try:
                os.makedirs(dirName)
            except:
                self.log.error('create directory %s failed' % dirName)
            else:
                self.log.info('create directory %s success' % dirName)

if __name__ == '__main__':
    go = GetCartoon()

代码不长,python🐂🖊
运行直接在pycharm中运行就好了{:301_1009:}

效果如下

https://attach.52pojie.cn//forum/201911/26/111544kqqjnghgkr9uc66p.png?l

https://attach.52pojie.cn//forum/201911/26/111547ufc5tz3ou1tt555t.png?l

后记https://static.52pojie.cn/static/image/hrline/5.gif

Selenium&PhantomJS对于那些动态页面和JavaScript返回有效数据的网站特别好使,但是就是效率不是很高{:301_1005:}



猎奇者 发表于 2019-12-30 12:31

不好意思啊,我是小白,这方面不大懂。需要什么信息呢?为什么编译提醒还需要 1.py 文件呢?
我是 win10 64 系统,python 3.7 ,pycharm 的安装也是按搜索教程来的,没有出现找不到系统变量之类的问题。只是之前有个找不到 selenium ,但是我在cmd安装好了

梦幻嘟嘟 发表于 2019-12-30 09:34

猎奇者 发表于 2019-12-29 21:32
你好。软件都装好以后,编译出错了,不知道什么问题
之前新建了一个1.py 以后我删除了它,然后就出现这 ...

这个就是提示你没找到 1.py这文件。。。具体你这点信息我也没得分析啊

炫夜探花 发表于 2019-11-26 11:59

这两个会动态加载,图片网址会显示在HTML中,直接取图片链接下载更好吧。

叶王 发表于 2019-11-26 12:04

直接在目录里边能取到每章的url,自己拼一下就可以,然后每个章节是有规律的#ipg1 #ipg2,还能取到每一个章节最大的页数,直接request就好了

fergus1987 发表于 2019-11-26 12:30

谢谢楼主分享!

一人之下123456 发表于 2019-11-26 12:33

厉害,向大佬学习。

loginnow 发表于 2019-11-26 13:00

你这个查看网页 模拟点击 能抓取视频地址吗??

pwp 发表于 2019-11-26 13:20

loginnow 发表于 2019-11-26 13:00
你这个查看网页 模拟点击 能抓取视频地址吗??

这个无头苍蝇就是有这个功能

梦幻嘟嘟 发表于 2019-11-26 14:07

叶王 发表于 2019-11-26 12:04
直接在目录里边能取到每章的url,自己拼一下就可以,然后每个章节是有规律的#ipg1 #ipg2,还能取到每一个章 ...

是的呢,最近在学习selenium,所以就没用request了

dongdongmian 发表于 2019-12-18 09:56

谢谢楼主分享,请问mylog是另外要用pip安装的吗?

猎奇者 发表于 2019-12-29 21:32

你好。软件都装好以后,编译出错了,不知道什么问题
之前新建了一个1.py 以后我删除了它,然后就出现这个错误了
页: [1] 2
查看完整版本: Selenium&PhantomJS实战--漫画下载系列