前言

上周一位朋友在进行一些项目开发时,其中需要用到腾讯动漫中动漫的图片,但是自己手动一张一张另存为图片进行保存太浪费时间了,于是就用Python来进行抓取,但是很无奈腾讯动漫的章节动漫DOM元素是异步加载的,另外图片也使用了懒加载,使用一般的抓取方式肯定是行不通,于是我们就进行分析了一波,最终成功的获取到图片链接,之后就可以为所欲为了~  。

正文

首先,我们需要选取一部动漫,就拿《最强兵王》作为例子吧,获取他第一章节的url,即为http://ac.qq.com/ComicView/index/id/631111/cid/4,首先我们先看看页面渲染的HTML:

由上图可以看出,漫画的主题部分均是使用JS模板来进行渲染的,所以我们需要等页面加载完成之后,在获取他的HTML元素:

from selenium import webdriverimport timeif __name__ == '__main__':    driver = webdriver.PhantomJS()    driver.get("http://ac.qq.com/ComicView/index/id/631111/cid/4")    time.sleep(3)    out_html= driver.find_element_by_xpath("//*").get_attribute("outerHTML")复制代码

上述代码中,我们将webdriver获取到页面之后进行睡眠3秒(即为等待3秒后继续执行下面的代码),那么这个时候JS已经将完整的漫画DOM元素渲染完成,我们就可以直接获取到渲染之后的完整的HTML。

不过这个时候我们发现一个问题:就是所有的漫画内的图片的URL都是相同的:

然后进行简单的测试发现,漫画章节图使用了懒加载的模式,即为滚动到某个图片的上方固定PX值时才进行加载真实的URL图片,那么我们就需要执行一段JS来模拟浏览器滚动,但是滚动不能太快,否则懒加载不会进行图片加载。修改之后的代码为:

driver = webdriver.PhantomJS()    driver.get("http://ac.qq.com/ComicView/index/id/631111/cid/4")    time.sleep(3)    driver.execute_script("""        var temp_index = 100;        setInterval(function(){            window.scrollTo(0,temp_index+=100);        },30);    """)    time.sleep(5)    out_html = driver.find_element_by_xpath("//*").get_attribute("outerHTML")复制代码

到这一步,我们就拿到了动漫章节包含真实的图片URL的完整HTML代码,接下来就可以为所欲为了,这里我使用了BeautifulSoup来进行获取属性值,所以最终的代码脚本为:

from selenium import webdriverimport timefrom bs4 import BeautifulSoup if __name__ == '__main__':    driver = webdriver.PhantomJS()    driver.get("http://ac.qq.com/ComicView/index/id/631111/cid/4")    time.sleep(3)    driver.execute_script("""        var temp_index = 100;        setInterval(function(){            window.scrollTo(0,temp_index+=100);        },30);    """)    time.sleep(5)    out_html = driver.find_element_by_xpath("//*").get_attribute("outerHTML")    soup = BeautifulSoup(out_html)    comic_contain = soup.find('ul', id='comicContain')    img_list = comic_contain.find_all('img', class_='loaded')    for i in img_list:        print(i['src'])  # 章节内每个漫画图的真实URL复制代码

效果为:

后记

总体来说,本次代码的编写过程还算顺利,其对整个的情况分析也是比较清楚,另外现在越来越多的网站都是使用的异步加载,感觉之后又要有一波新的技术即将来袭~

原文地址

使用Selenium+PhantomJS抓取腾讯动漫漫画图链接

使用Selenium+PhantomJS抓取腾讯动漫漫画图链接相关推荐

  1. [Python爬虫] 之十二:Selenium +phantomjs抓取中的url编码问题

    最近在抓取活动树网站 (http://www.huodongshu.com/html/find.html) 上数据时发现,在用搜索框输入中文后,点击搜索,phantomjs抓取数据怎么也抓取不到,但是 ...

  2. python selenium 爬取js加载的内容为空,Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容...

    1,引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor.本文记录了确定gsExtractor的技术路线过程中所做的编程实验.这是第二部分,第一 ...

  3. 抓取腾讯动漫app的插图链接

    今天腾讯动漫app限免国产漫画,但是网页版没有,本来还还想去爬一些漫画以后慢慢看的,嘻嘻. 既然app限免,那就花一天时间看咯,然而我不可能花一天时间看.所以,我想把插图爬下来的心还没死掉. 于是我抓 ...

  4. 使用selenium爬取腾讯动漫!国漫也有好看的!

    前言 本来只是想学习一下selenium模块的简单使用,然后一直添加功能,感觉能把它变成一个项目了,于是乎,就有了这篇文章 写得很烂,速度很慢,但不影响这是我的第一次尝试,如果师傅们花时间看看我的代码 ...

  5. 使用selenium爬取腾讯动漫

    文章目录 前言 一.Download.py 1.导入模块 2.构造Download类 3.Download 类中的函数 (1)login() (2)loading() (3)comic_info() ...

  6. Python爬虫---爬取腾讯动漫全站漫画

    Python爬虫---爬取腾讯动漫全站漫画 操作环境 网页分析 明确目标 提取漫画地址 提取漫画章节地址 提取漫画图片 编写代码 导入需要的模块 获取漫画地址 提取漫画的内容页 提取章节名 获取漫画源 ...

  7. Python中使用PhantomJS抓取Javascript网页数据

    有些网页不是静态加载的,而是通过javascirpt函数动态加载网页,比如下面这个网页,表格中的看涨合约和看跌合约的数据都是通过javascirpt函数从后台加载.仅仅使用beautifulsoup并 ...

  8. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫

    一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...

  9. Python 爬虫 携程池 爬取腾讯动漫

    简介 主要爬取腾讯动漫上某一漫画的所有图片的url 所用到的库 分析腾讯动漫网址 代码 所用到的库 gevent gevent.pool requests selenium xpath 分析腾讯动漫 ...

最新文章

  1. 【原创】WP7.8 ROM更新图文并茂
  2. 如何在React Native中写一个自定义模块
  3. 搭建NFS使多个服务器中的web项目共享图片资源
  4. Keras---text.Tokenizer:文本与序列预处理
  5. 学习面试题(day01)
  6. java中的小知识点
  7. 【NOIP2000】【Luogu1019】单词接龙
  8. MyBatis返回结果不稳定
  9. lambda java kotlin,Kotlin之Lambda编程
  10. Python_pip_03_安装模块出现错误时咋整
  11. 本地项目第一次上传到SmartSvn
  12. 三个视频教你如何找到另一半
  13. 单调栈-leetcode-739. 每日温度
  14. 德国华人餐饮外卖的春天?
  15. Windows 内存映射
  16. 制作一个简单的倒计时动画
  17. 我的2016——程序员年到三十,工作第四年
  18. 关于height:100%的简单理解
  19. es创建索引和mapping
  20. 人工智能芯片研究报告

热门文章

  1. 全维观测器matlab,全维状态观测器详解.ppt
  2. IIS put请求 报HTTP Error 405 - Method Not Allowed
  3. 华为在印度市场再受挫折,跌出智能手机市场份额前五
  4. 单元测试到底测什么?
  5. 徐有高【TTG多玩自购】PS3《英雄传说 闪之轨迹》
  6. java计算机毕业设计医院住院部信息管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  7. 为什么别人都不主动联系你
  8. win7本地连接状态未知,依赖服务或组无法启动的六种解决方法
  9. 9天封闭式开发,通过TAPD工具进行敏捷开发实践
  10. 前端处理订单倒计时显示问题