使用Python爬取并下载腾讯动漫
开发环境
操作系统:windows 10
Python版本 :3.6
爬取网页模块:selenium,PhantomJS
分析网页模块:BeautifulSoup4
关于Selenium
selenium 是一个Web自动测试的工具,可以用来操作一些浏览器Driver,例如Chrome,Firefox等,也可以使用一些headless的driver,例如PhantomJS
具体请参加官网:
http://selenium-python.readthedocs.io/
关于PhantomJS
PhantomJS是一个无头(headless)的WebKit javascript API
我们可以用它模拟浏览器的操作,也可以用来截图
具体参加官网:
模块安装
lxml为解析网页所必需
pip3 install selenium
pip3 install BeautifulSoup4
pip3 install lxml
Driver 下载
这里我们下载Chrome driver和 Phantomjs
其他的driver见官网
http://selenium-python.readthedocs.io/installation.html#drivers
Chrome下载
下载完成后可以放到系统环境变量中,如:
C:WindowsSystem32
https://sites.google.com/a/chromium.org/chromedriver/downloads
PhatomJS下载
下载后同样放到系统环境变量中
下载完成解压后只需要将exe文件放到目录下
http://phantomjs.org/download.html
网页分析
我们以幽游白书为例
http://ac.qq.com/ComicView/index/id/543606/cid/1
打开后发现漫画并没有全部加载需要向下翻页才可以加载完毕
之后通过开发者工具分析图片的地址
这里我们通过bs4 来提取出所有img地址
之后通过Python将其保存成图片
程序原理
代码介绍
- import相关的模块
import selenium.webdriver
from bs4 import BeautifulSoup
- 调用Chrome或者PhantomJS
driver = selenium.webdriver.Chrome()
#driver = selenium.webdriver.PhantomJS()
- 获取网页源代码
content=driver.page_source
- 获取标题和图片地址之后存入字典
- 新建目录并下载图片
这里首先判断是否有该漫画的目录,如果没有则新建,之后下载图片,图片的名称为列表的索引号
执行结果
注意事项:
- 建议先用Chrome测试OK,再改用PhantomJS执行
- Chrome和PhantomJS在实际向下翻页时有差异,需测试后调节循环次数
- 为防止被ban,每次爬取采用了随机延迟的方法
- 只能爬取免费的内容
- 本脚本仅用于学习用途
源码位置
源码请访问我的github主页
https://github.com/bsbforever/spider/blob/master/selenium_web.py
- OpenStack Magnum及Liberty新功能简介
- JDK10要来了:下一代 Java 有哪些新特性?
- 是时候忘掉finalize方法了
- 学会一个JVM插件:使用HSDIS反汇编JIT生成的代码
- ONOS 实战分享(一):项目建立、调试到热部署
- 自己动手系列-延迟队列
- OVS中Action源码分析&自定义Action
- 读懂一行Full GC日志(回复JVM内存分配担保机制一文中 Mr/Mrs Xxx 在留言区提出的问题)
- 总结了一些指针易出错的常见问题(四)
- 当你在浏览器中输入Google.com并且按下回车之后发生了什么?
- 总结了一些指针易出错的常见问题(三)
- C++/C头文件 .h和 .c
- 史上最清晰的红黑树讲解(下)
- 网络操作系统VyOS安装与初步使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法