python爬取拉勾网招聘信息(字典形式解析json)

前言:一个课的爬虫作业,备份到小博客一下,这个作业了解到了如何构造cookie

一、拉勾网数据爬取思路和遇到的反爬机制

本文想通过爬取拉勾网上的关于python的招聘信息来分析一下python岗位大体情况,在输入框中键入python,F12打开开发者模式,并点击搜索

发现这个XHR返回的信息就是我们所需要的,观察其Headers

发现向服务器发送的是post请求,信息包括三个参数,first,pn,python

第二个是页码,第三个是搜索关键字,而当我们点击第二页后发现first变成了false,而且多了一个参数sid,于是这个才应该是适用于所有页数的参数。

那思路就是构造for循环,每次传递不同的页码给pn参数即可

然后就遇到了拉勾网的反爬机制:

开始没设置header,直接发送post请求,遭到服务器拒绝;

于是我设置了header里的Host,User-Agent,依然遭到服务器拒绝;

我又把cookie那串很长的字符串以及其他header里的元素也都直接复制进去了,同样遭到服务器拒绝;

后来发现那个cookie是实时变化的,里面会有时间加进去,如下图所示:

通过在网上百度和查阅资料(来自优秀的打浦桥星球球友的爬虫报告),这cookie主要通过两部分得到:

1.对于WEBTJID、LGSID、LGUID、 LGRID这四个字符串通过获取系统当前时间加上F12看到的后半段字符串复制过来直接拼接在一起

2.对于cookie中的JSESSIONID、SEARCH_ID、user_trace_toke、X_HTTP_TOKEN,网上一个帖子分析应该是点击搜索时网页生成的或者是服务器发送给网页的,所以应该会有一个get或者post请求返回的是这部分

经过尝试,发现这个get请求会返回浏览器这些字符串

最后面把两部分拼起来就是我们要的cookie;加上构造的cookie后即可正常访问,返回的内容可以变成json格式,便可以利用字典的形式获取想要的数据,公司名字,所在城市等,并把每个公司的数据放入一个列表,并将每个公司的列表放入最后结果的列表中。

后来在页数循环(一共30页的搜索结果)里又报错了,百度了下发现是服务器认为我访问过于频繁,于是每一页我加了10s的等待时间,但是爬了5页后又开始报错,于是我又每5页再等10s,这才正常爬取完毕了,平均下来每一页要等待12s,经实际测试,爬取完30页共需要400s左右。

二、数据获取情况

此次共爬取拉勾网上关于python岗位的信息,共30页搜索结果,450条招聘信息,采集的字段主要是:companyShortName,city,companySize,industryField,positionName,worker_year,education,salary,positionAdvantage,positionLables,skillLables,分别是公司简称,所在城市,公司人数规模,公司从业领域,招聘岗位名称,工作经历要求,学历要求,薪资,岗位福利,岗位标签,岗位所需技能,如下图所示意。

发布了62 篇原创文章 · 获赞 118 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_38412868/article/details/101938656
今日推荐