您的位置:新闻资讯 >文章内容
【实战】动态网页的爬取方法
来源:神精兵院院长黑猫院长 作者:admin 时间:2018-12-27 17:55:42

页面有静态于动态之分,相对而言,想要爬取动态网页,难度会大一些。很多网站为了减少大量的爬虫爬取数据,就会采用动态网页。动态的页面,会让爬虫无法直接的爬取到数据,比如,网页的数据采用异步加载的,比如ajax加载的数据,在我们“查看网页源代码”是查看不到的。但也有方法爬取的,今天跟精灵代理去了解一下动态网页的爬取方法。


一、动态网页的使用场景


比如上网站看一本书。我们发现打开一本书之后,书的价格,排名等信息及书的评论信息不是在我们第一次打开网站时就立即加载进来的。而是通过二次请求或多次的异步请求获取的。这样的页面就是动态页面。

关于动态页面使用的场景:

希望异步刷新的场景。有些网页内容很多,一次加载完对服务器压力很大,而且有的用户不会去查看所有内容;


二、回到与HTTP服务器发送请求数据的原始方法


1.GET方法

GET把参数数据队列添加到URL中,Key和Value的各个字段一一对应;在URL中可以看到。

1.https://www.baidu.com/s?wd=DNS

?xxx=yyy&time=zzz get 请求的标识

2.http://acb.com/login?name=zhangsan&password=123

login: name=zhangsan  password=123

示例代码:SpiderCodes\baiduSearchp2.py


2.POST方法

通过一个例子来看POST方法的使用:

动态网页的爬取方法

动态网页的爬取方法


这是有道翻译的页面,仔细观察会发现,当用户每次输入一个想要翻译的词语时,页面的URL信息并不发生任何改变。这是一个典型的异步使用Ajax的技术,用JSON格式进行数据的传递。

我们如何利用爬虫程序来实现一个自己的翻译器呢?

来看代码示例:SpiderCodes\youdaofanyip2.py


三、更加难以对付的动态网站


1.应对需要多次数据的交互模拟的网站

我们有时会遇到像淘宝这样的大型网站,对数据版权看得特别重的,它们的网站有大量的工程师和技术人员去维护,它们也可能在技术手段上采用多次交互数据包的方式来完成网站服务器与用户浏览器之间的交互。如果此时还采用传统的分析数据包的方式会比较的复杂,难度较高。那么,有没有一劳永逸的方法,来解决此类问题呢?

我们的解决方案是:Selenium + PhantomJS。


2.Selenium

一个Web自动化测试工具,最初是为了网站自动化测试而开发的;我们玩游戏有按键精灵;Selenium也可以做类似的事情,但是它是在浏览器中做这样的事情。

安装: sudo pip install selenium(pip install selenium)

在Python中 from selenium import webdriver 来测试是否装好

说明:想要用Python做自动化测试的童鞋们可以好好研究一下Selenium的使用。


3.PhantomJS

一个基于webkit无界面(headless)的浏览器,它可以把网站加载到内存中并执行页面上的JS,但它没有图形用户界面,所以耗费的资源比较少;

安装:sudo apt install phantomjs (此方法可能安装不完整,导致部分功能无法使用)

Linux Ubuntu下完全安装的方法:

Wget http://phantomjs.org/download.html

 cd 下载

 tar -xvf phantomjs-2.1.1-linux-x86_64.tar.bz2

 cd phantomjs-2.1.1-linux-x86_64/

 cd bin/

 sudo cp phantomjs /usr/bin

python -启动-> 浏览器进程phantomjs,

测试:

SpiderCodes\Phantomjs\..  对其中的例子helloworld.js, pageload.js

进行测试;

注意:   ****有可能造成资源泄漏;为了避免这种事的发生,需要有个策略适当的时候去kill phantomjs进程。


4.Selenium + PhantomJS

双剑合璧利用二者同时完成某个任务,示例代码如下:

SpiderCodes\testPhantomJS.py


总的来说,我们的爬虫要尽量模拟的看起来就像是真正的用户在浏览器上访问服务器网站的行为。如果我们使用GET或POST的方式来模拟浏览器与服务器间通信的行为,成本比较低,但是应对复杂的网站或者服务器精心防御的网站来说是很难骗过服务器的。Selenim+PhantomJS的方案则会让我们的程序看起来更像是普通的用户,但是它的效率相对而言会降低很多,速度也会慢很多。在大规模爬去数据时可能遇到许多新的挑战。



相关文章内容简介
在线咨询
微信公众号

微信公众号

回到顶部