scrapy 搜索关键字_Scrapy抓取动态网页

动态网页指几种可能:

1)需要用户交互,如常见的登录操作;

2)网页通过JS/ AJAX动态生成,如一个html里有

aaa

3)点击输入关键字后进行查询,而浏览器url地址不变

本篇文章不借助任何外部工具,实例操作如何以观察网络通信的方法解析动态网页。

环境:Win10 , python2.7,scrapy 1.4.0,Chrome浏览器,Firefox浏览器

1、观察是否为动态网页

以华盛顿邮报为例,搜索关键词 French ,搜索到的结果如下:

415b0655202e9402e02d3ecb716bc705.png

F12打开控制台,在Element下找到想要获得的搜索列表数据所在的section标签”main-content”

e32df7d1ea0a2f052d690cffa56bd4bc.png

然后转到Network的Doc标签,重新加载当前网页,在Name下点击第一个文件,在右边的Preview下寻找相应的section id 为 “main-content”的元素,发现没有数据:

214bc615cd00093ffb90d00ee4dd1a57.png

说明该内容为动态加载

2、获得JS点击动作发出的请求url

在JS标签下寻找真正存放数据的网页,点击Name下的文件观察右侧的Preview有没有数据,存放数据的网页才是我们真正需要爬取的网页:

89d2399ec1e4bb39daaa856c09ab5a4c.png

一个小技巧:一般动态加载的数据都以json形式存储,在Filter里填json过滤,可以更加快速地寻找到想要的文件,但不是所有的网站都适用,还是需要在JS或XHR里手动寻找所需文件。

复制当前文件的链接,得到一个很长的url:

在浏览器中打开这个地址,发现这是一个json文件,但是该url太过冗长,我们可以根据需要适当地删减一些参数,这些参数可以在Headers下得到:

19449eda02f11a7b8284fbc97f80876c.png

选择保留count,datefilter,query三个参数,注意,必须保证删减参数后的网页与原url获得的json数据一样,精简后的url为:

在火狐浏览器中打开该url(选择火狐浏览器打开是因为json数据显示友好),获得的页面如下:

f2acc346501dd80aa9689c0959b24725.png

3、提取json数据

根据以上json文件的结构,我们可以用json.loads函数进一步提取想要的数据:

0c26a60a34d5e81209e55dc2a94c27b1.png

4、翻页机制

在网页上进行操作,观察url的参数变化规律:

第一页:

cc0e029ee9592913f6ed9d297defb98d.png

第二页:

915ca2f6c7c36833428ccd67fff75405.png

第三页:

ba584e47ea0b9e898c372955f43ca769.png

发现每一页的url变化都是由多出来的startat这个参数导致的,解析下一页只需要每次让startat的值增加20,在url后添加该参数即可,如第二页:

最后根据新闻总数来计算出最后一页的startat值即可

5、解析以表单形式提交参数的动态网页

有的网站输入关键字后进行查询,而浏览器url地址不变,有可能是以表单形式提交Request参数。

以苹果日报为例,关键字搜索“法國”,url中却没有类似“?q=法國”的参数

2c836eb33087c4f381f53dc9c2b7ad9a.png

再次加载该url,发现其定位在一个单独的搜索页面:

320673ac09a406e95b3ab6aee071b0d6.png

分析搜索的结果,发现该参数是以表单的方式提交的:

cd57f503e2bed5698fe6ffc517bae7ff.png

根据input 的参数填充FormRequest:

0b43951fea041fbee941dfdb4035cbcd.png

返回的response就可以用xpath正常解析网页了:

14d958b1dd195cde5c470de9337fb473.png

4aa6fbdbe0cabbc85ebfdc8202c438af.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值