python爬虫js生成的url_网络数据抓取-JS动态生成数据-Python-requests爬虫

本文介绍如何使用Python爬虫抓取JS动态生成的网页数据,以拉勾网招聘页面为例,讲解如何理解页面、数据请求、发送数据请求,并通过模拟浏览器的Headers和Form Data获取JSON数据,最后解析并输出到Excel。
摘要由CSDN通过智能技术生成

前面三篇文章介绍了如何利用Headers模拟浏览器请求,如何嵌套For循环抓取二级页面。但针对的都是Html文件数据,这一篇我们来看一下另外一种情况的数据以及更加复杂的Headers模拟。

案例是拉勾网(一个招聘网站)抓取某个公司全部招聘信息,然后分析中大型人工智能公司的人才需求分布情况。

这次我们使用Anaconda的Jupyter Notebook。

1. 理解页面

打开这个页面,这是思必驰科技(一家专注于人工智能语音技术的科技公司)在拉勾网的全部招聘职位列表。

AAffA0nNPuCLAAAAAElFTkSuQmCC

思必驰招聘职位

我们可以看到共有47个招聘职位。但是,如果我们【右击-查看网页源代码】,然后【Ctrl+F】搜索第一个职位的名称“运维技术专家”却什么也搜不到,实际上整个页面只有600行左右,并没有包含任何职位信息。

数据不在请求的Html文件里面,数据在哪?

这几年的网站很多都采用了类似游戏的模式:你打开游戏软件的时候,本机电脑里面没有任何玩家信息,但是游戏软件启动后会向服务器请求数据(而不是Html文件),拿到这些数据之后,游戏软件就把各种在线玩家数据显示在屏幕上,让你能够看到他们。

换成网页就是:你刚打开网页的时候,请求的Html文件没有数据,但是网页在浏览器运行之后,网页自己就会向服务器请求数据,网页拿到数据之后,它就会把各种数据填充到页面上,你就看到了这些数据,——但这些数据并不是像以前那样直接写在html文件里的。

AAffA0nNPuCLAAAAAElFTkSuQmCC

动态填充数据页面流程

这些能够动态请求数据和填充数据的代码就是Html网页内运行的JavaScript脚本代码,它们可以做各种事情,尤其善于玩弄数据。

JS(JavaScript)从服务器获取的数据大多是json格式的,类似下面这种对象(Python里面也叫dict字典),也有xml格式的,这里暂时用不到就不介绍了。data={  'title':'内容标题',  'text':'文字内容'}

这个格式看上去比html一堆尖括号标记看上去舒服多了。但如何拿到这个数据呢?

2. 理解数据请求Request

我们知道Elements面板显示了所有标记元素,而Network面板显示了所有浏览器发出的请求Request,既然JS是向服务器发出请求的,那么就一定会在Network面板留下痕迹。

还是刚才的页面,【右键-检查】切换到Network面板,点击红色小按钮清空,然后点击上面的第2页按钮,查看Network里面的变化。

AAffA0nNPuCLAAAAAElFTkSuQmCC

Network查看JS的xhr请求

我们注意到searchPosition.json这行,它的类型(Type)是xhr,数据请求都是这个类型的。

点击searchPosition.json可以看到这个请求的详细信息。

AAffA0nNPuCLAAAAAElFTkSuQmCC

Headers详细信息

和之前的稍有不同,它没有Parameters数据(因为地址栏没有?aaa=xxx&bbb=yyy这类结尾了),但是多了Form Data表单数据,其实和Parameters作用相同,就是向服务器说明你要哪个公司(companyId)的数据、第几页(pageNo)、每页多少个职位(pageSize)等等。

再点击上面的【preview】预览,可以看到这个请求实际获得了什么数据:

AAffA0nNPuCLAAAAAElFTkSuQmCC

数据结构预览

如图,小三角一路点下去,就能看到这个数据实际和页面展示的职位列表是一一对应的。所以我们只要拿到这个数据就OK了!

3. 发送数据请求

上面看到,我们需要的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值