python 获取cookie_用Python批量爬取拉钩网招聘信息

今天我们要爬取的是拉勾网的招聘信息

需求1:

  • 获取以下信息
  1. 城市
  2. 公司名
  3. 公司规模
  4. 学历
  5. 职位名称
  6. 薪资
  7. 工作时间

需求2:

以逗号(,)分割信息内容,写入csv文件。

网址分析:

  • URL :https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=
  • 查看网址源码
fb19274c9e01f8bfba0a4431263fa5b0.png
通过查看源码分析得知,拉勾网的数据都是动态加载的,需要通过抓包才能获取里面的数据。按F12或者右键点击检查找到以下页面。(如果没有请刷新一下页面)
2bc26c3f6e9d691ee1ce09e2a3e4dcef.png

这么多数据包,到底哪一个是我们需要的呢?

搜索一下关键词

de4c141d4ab2365559ea18692c7dd73d.png

确定里面包含了我们需要的信息,那么我们开始进行编写爬虫

取出headers里面的url

import requestsimport jsonapi_url ='https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'header = {    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',    }response = requests.post(api_url)result = response.json()print(result)

我们尝试一下打印:

c5c322454393530aba6ae49ece318117.png

得到以下结果,提示操作太频繁,但是只请求了一次呀,请求头也加了,怎么会这样呢?

把以下几个参数加入试试;

3f485df7c590588e1af5d974cdf8ad8b.png
HostOriginReferercookie
import requestsimport jsonurl ='https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'header = {    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',    }response = requests.post(api_url,headers=header)result = response.json()print(result)

打印以下结果看看

427c9843ee47f99d94354a2c2aac75eb.png

还是提示操作太频繁了。user-agent和cookie都传了,为什么还是不行呢?

分析一下:

  • 首先,我们的ip肯定是没有被封的。
  • 根据http协议原理,cookie是http客户端服务器设置的
  • js可以修改cookie
  • 那么我们来清理一下所有的cookie
5b0cb1d186538e830c25746e542d3b43.png

再次刷新网页

3c85b3fce868296e22af5471e66f173e.png

服务器重新给我们返回了cookie,里面包含着一些session,id等等信息

那么我们尝试是一下那个是我们需要的:

再次打印:

f232321002b09e7cdbf7a13f0aa50848.png

成功返回我们需要的数据~

但是发现一个问题,这个cookie是不稳定的,使用的次数多了,还是会出现操作太频繁的警告,那么怎么实现一劳永逸呢?

向https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=这个url发起请求。

url='https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput='responses = requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'})cookie = responses.cookiesprint(cookie)

打印一下:

91b461c0aa2d7ce1c07917a1e281f921.png

出现了我们需要的cookie,成功解决了我们刚才的不稳定因素。

下面我们把cookie加入到请求里面

url='https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput='responses = requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'})cookie = responses.cookies

下面开始对数据进行处理

09e1f8b4a37a306d7813f8b92a7eda59.png
afde08e3b2125951425acddad30cdee1.png

通过返回的数据可以分析出,我们需要的数据在conment——positionResult——result这样的层级里面,下面我们开始编写代码。

import requestsimport jsonurl='https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput='responses = requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'})cookie = responses.cookiesapi_url ='https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'header = {    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',    'Host':'www.lagou.com''Origin':'https://www.lagou.com''Referer':'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='}data = {    'first': 'true',    'pn':'1',    'kd':'python',    }response = requests.post(api_url,headers=header,data=data,cookies=cookie) #发起请求result = response.json()  #转换成json格式的results = result['content']['positionResult']['result'] #通过层级获取result里面的信息    for i in  results:# 遍历数据        d = {      #以字典的形式展示            'city':i['city'],            'companyFullName':i['companyFullName'],            'companySize':i['companySize'],            'education':i['education'],            'positionName':i['positionName'],            'salary':i['salary'],            'workYear':i['workYear'],        }     print('d')

打印结果:

3f6bcd5f737850ced81e2e606b1dad88.png

好啦,第一个需求已经完成,下面开始完成第二个需求;

以逗号(,)分割信息内容,写入csv文件。

话不多说,开始编写代码

import requestsimport jsonurl='https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput='responses = requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'})cookie = responses.cookiesapi_url ='https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'header = {    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',    'Host':'www.lagou.com''Origin':'https://www.lagou.com''Referer':'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='}data = {    'first': 'true',    'pn':'1',    'kd':'python',    }response = requests.post(api_url,headers=header,data=data,cookies=cookie) #发起请求result = response.json()  #转换成json格式的results = result['content']['positionResult']['result'] #通过层级获取result里面的信息    for i in  results:# 遍历数据        d = {      #以字典的形式展示            'city':i['city'],            'companyFullName':i['companyFullName'],            'companySize':i['companySize'],            'education':i['education'],            'positionName':i['positionName'],            'salary':i['salary'],            'workYear':i['workYear'],        }     with open('拉钩职位信息.csv','a',encoding='utf-8')as f:        f.write(','.join(d.values()))            f.write('')

运行一下

6d48b1a81420c28e22aec0b475670117.png

出现一个后缀为.csv的文件,我们打开看看吧。

36d0d429f2f0e2f7679cd268601c1dc1.png

大功告成了。

总结

  1. 本章我们学习了如何实现应对反爬。
  1. 通过数据分析得知,一个数据包只有15条数据(参考数据处理那一段的图片)那么我们想要30,100条甚至更多呢?
  2. 注意:如果批量爬取,一定要设置延时,否则爬太快容易封ip,会导致一段时间无法进入该网站,同时也是很不友好的行为。
  3. 本文仅供学习交流,请勿商用。谢谢

关注公众号,获取完整代码

f68c117ed746c7356fa034ad66e32428.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值