动态网站的抓取静态网站困难一些,主要涉及ajax和html,传统的web应用,我们提交一个表单给服务器接受请求返回一个页面给浏览器,这样每次用户的交互都需要向服务器发送请求。
同时对整个网页进行刷新,这样会浪费网络宽带影响用户体验。
怎么解决?
Ajax--异步JavaScript和xml。
是JavaScript异步加载技术、xml及dom还有xhtml和css等技术的组合。
他不必刷新整个页面只需要页面的局部进行更新。
Ajax只取回一些必要数据,使用soap、xml或者支持json的web service接口。
这样提高服务器的响应减少了数据交互提高了访问速度。
Dhtml动态html,他只是html、css、和客户的的一宗集合,一个页面有html、css、JavaScript 制作事事变换页面的元素效果的网页设计。
如何分辨?
最简单的就是看有没有“查看更多”字样,也可以使用response访问网页返回的response 内容和浏览器的内容不一致时就是使用了动态技术。
这样我们也无法提取有效数据
如何提取?
1直接在JavaScript中采集的数据分析
2使用采集器中加载好的数据
为什么使用Phantomjs?
Ajax请求太多并加密,手动分析每个ajax请求无疑愚公移山,phantomjs直接提取浏览器渲染好的结果不进行ajax请求分析,其实phantomjs就是基于webkit 的服务端JavaScript api。
支持web而无需浏览器支持运行快,支持各种web标准:dom、css、json、canvas、svg。
常用于页面自动化、网络监测、网页截屏、无界面测试。
安装?
下载/download.html解压设置环境变量phantomjs -v测试安装
下载:{l55l59〇6〇9〇}
使用
页面加载:分析创建网页对象的呈现
代码:使用webpage模块创建一个page对象,通过page对象打开url网址,如果状态为success 通过render方法将页面保存。
代码评估:利用evaluate执行沙盒它执行网页外的JavaScript代码,evaluate返回一个对象然后返回值仅限对象不包含函数
屏幕捕获:
网络监控:
页面自动化:
常用模块和方法?
Phantom,webpage,system,fs
图形化?
Selenium将Python和phantomjs紧密结合实现爬虫开发。
Selenium是自动化测试工具,支持各种浏览器,就是浏览器驱动可以对浏览器进行控制。
并且支持多种开发语言phantomjs 负责解析JavaScript,selenium负责驱动浏览器和Python对接。
安装
pip install selenium===3.0.1 或者https:///pypi/selenium#downloads 下载源码解压python setup.py install selenium3然后下载https:///SeleniumHQ/selenium/
浏览器补丁解压到指定目录,将geckodriver所在目录配置到环境变量。