Scrapy入门-模拟网络发包翻页爬取数据

在前文 Scrapy入门-翻页爬取及抓取链接页内容 中,我们了解了如何利用Scrapy框架进行翻页数据的爬取。当时,我们是用XPATH去识别“下一页”这个关键元素,访问其href属性中注明的下一页的链接地址,如此循环,最终得到了每一页的数据。然而,这种方案存在一个限制,即网页的“下一页”这个元素的属性中,必须给出下一页的链接。

如下图的网页中,下一页的href属性就不是一个真实的链接地址,它表示点击下一页时,程序时通过执行一段JS代码来获取下一页的数据。本文就将通过一个实例手把手教大家如何翻页抓取这类网页的数据。下面一起来看看吧。

爬取目标

本文的目标,是抓取 “全国中小企业股份转让系统”中所有的挂牌公司,获取其公司代码、公司简称、地区三个字段的值。

网络包分析

这次我们要学会使用浏览器F12开发者工具中的“网络“一项的功能,它会记录浏览器和网站交互的所有网络请求。我们先通过这个功能,看看浏览器点击下一页的时候,发出了什么请求,向web服务器获取了什么内容。

我们先打开F12开发者工具,选中“网络”tab页。为了方便筛选分析网络包数据,我们先清除之前记录的网络包数据。然后点击网页中的下一页按钮。可以从F12界面中看到,浏览器发出了一个POST请求和一个GET请求。在POST请求的响应正文里,返回的正是界面上展示的股票信息。请求正文里,送了五个字段,page、sortfield、sorttype、typejb、xxzqdm。根据变量命名很容易猜出第一个应该是页索引,第二个是排序字段,第三个是排序规则,第四个和第五个字段可以忽略。用同样的方式多点击几次下一页,看看请求正文中的字段信息是否如我们所猜测那样。

发包逻辑验证

网络包分析完成后,我们可以借用Postman工具进行模拟发包,验证我们的猜想,同时,也可以验证网站是否对cookie存在要求。笔者认为这一步相当重要,只有先完成前期验证工作,为下一步编码实现打下基础,才能少走很多弯路。

我们在postman工具中输入url地址,参数和网络包分析的保持一致,发现可以正常获取到股票信息,格式是一个json串的格式。仅改变入参中page字段的值,即可以正常进行翻页数据获取。那么接下来,我们就可以正式开始编码工作了。

编码实现

我们通过命令“scrapy startproject neeqSpider”来创建一个新项目,并通过genspider命令生成一个基础的Spider爬虫模板,这块的操作和前几篇文章描述的完全一致,这里就不再赘述了。

这里的parse函数不解析start_urls的返回结果,而是在构造post请求参数,循环发送POST请求。POST请求指定了回调函数parse_item

Parse_item函数的实现逻辑如下,它完成的主要工作就是解析响应正文,从json串中解析出我们需要的数据。

通过scrapy crawl neeqspider -o neeq.csv 即可以允许爬虫脚本,将结果输出到neeq.csv中,如下图所示

至此,我们就通过模拟网络发包,爬取了所需要的新三板代码信息。文章篇幅所限,需要完整源代码的,可以关注后私信我获取。笔者后续也将放出更多的Scrapy功能演示案例,喜欢就点赞关注我吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值