2018-02-26 Python 宅必备 好久没更新Python相关的内容了,这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分 上节我们说了如何获取动态网页中的jquery内容 这节说如何利用selenium模拟浏览器动作 ## 开发环境 操作系统:windows 10 Python版本 :3.6 爬取网页模块:selenium,PhantomJS 分析网页模块:BeautifulSoup4 ## 关于Selenium selenium 是一个Web自动测试的工具,可以用来操作一些浏览器Driver,例如Chrome,Firefox等,也可以使用一些headless的driver,例如PhantomJS 具体请参加官网: [http://selenium-python.readthedocs.io/](http://selenium-python.readthedocs.io/) ## 关于PhantomJS PhantomJS是一个无头(headless)的WebKit javascript API 我们可以用它模拟浏览器的操作,也可以用来截图 具体参加官网: [http://phantomjs.org/](http://phantomjs.org/) ## 模块安装 lxml为解析网页所必需 ``` pip3 install selenium pip3 install BeautifulSoup4 pip3 install lxml ``` ## Driver 下载 这里我们下载Chrome driver和 Phantomjs 其他的driver见官网 [ http://selenium-python.readthedocs.io/installation.html#drivers]( http://selenium-python.readthedocs.io/installation.html#drivers) [image:72 size:orig] **Chrome下载** 下载完成后可以放到系统环境变量中,如: ``` C:\Windows\System32 ``` [image:73 size:orig] [https://sites.google.com/a/chromium.org/chromedriver/downloads](https://sites.google.com/a/chromium.org/chromedriver/downloads) **PhatomJS下载** 下载后同样放到系统环境变量中 下载完成解压后只需要将exe文件放到目录下 [image:74 size:orig] [http://phantomjs.org/download.html](http://phantomjs.org/download.html) ## 网页分析 我们以幽游白书为例 [ http://ac.qq.com/ComicView/index/id/543606/cid/1]( http://ac.qq.com/ComicView/index/id/543606/cid/1) 打开后发现漫画并没有全部加载需要向下翻页才可以加载完毕 之后通过开发者工具分析图片的地址 [image:75 size:orig] 这里我们通过bs4 来提取出所有img地址 之后通过Python将其保存成图片 ## 程序原理 [image:76 size:orig] ## 代码介绍 1. import相关的模块 ``` import selenium.webdriver from bs4 import BeautifulSoup ``` 2. 调用Chrome或者PhantomJS ``` driver = selenium.webdriver.Chrome() #driver = selenium.webdriver.PhantomJS() ``` 3. 获取网页源代码 ``` content=driver.page_source ``` 4. 获取标题和图片地址之后存入字典 [image:77 size:orig] 5. 新建目录并下载图片 这里首先判断是否有该漫画的目录,如果没有则新建,之后下载图片,图片的名称为列表的索引号 [image:78 size:orig] ## 执行结果 [image:79 size:orig] [image:80 size:orig] ## 注意事项: - 建议先用Chrome测试OK,再改用PhantomJS执行 - Chrome和PhantomJS在实际向下翻页时有差异,需测试后调节循环次数 - 为防止被ban,每次爬取采用了随机延迟的方法 - 只能爬取免费的内容 - 本脚本仅用于学习用途 ## 源码位置 源码请访问我的github主页 [https://github.com/bsbforever/spider/blob/master/selenium_web.py](https://github.com/bsbforever/spider/blob/master/selenium_web.py)