IP被封?NO!Python解决各路反爬措施,强势采集拉勾网数据
2020-04-22 本文已影响0人
一起学编程
保持Cookie与浏览器来源(User-Agent)的说明,如果不加浏览器来源会造成一个IP频繁的假象。
为什么说是假象呢?因为当你用浏览器再次访问是可以正常访问的,自行测试即可。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:595948765
欢迎加入,一起讨论 一起学习!
不建议小白阅读此文,不建议不喜欢动手的人阅读此文,因为不做的话,永远不知道事情的真相。
由于网页源代码中并没有我们需要的信息:

那么我们进行抓包测试:
发现此包中的确包含了我们想要的信息。
注意:
这个post请求当中 表单数据first=ture 是不变的,pn代表页码,当然kd代表我们需要查找的关键词。
请求这个url必须带上referer,这个报文代表我们的url来源。还有我们的浏览器来源user-agent用户代理也要添加!
这样请求,你会发现还是无法正常的获取到数据,那么别忘记我前面说的,保持cookie。在此处有人会直接复制cookie报文,但是别忘了cookie是有时效性的,所以怎么办?
最好的办法就是 提前访问此url的来源,从来源中把cookie取下来,添加到这个请求当中。
最好筛选数据即可:
kw = input('请输入你想要查询的工作:')
for i in range(1, 10):
data = {
'first': 'true',
'pn': i,
'kd': kw
}
headers = {
'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
}
session = requests.session()
session.get('https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=', headers=headers)
cookies = session.cookies
cookies = cookies.get_dict()
res = session.post('https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false', data=data, headers=headers, cookies=cookies).json()
# print(res)
res = res.get('content',)
# print(res)
res = res['positionResult']['result']
# pprint.pprint(res)
cities = jsonpath.jsonpath(res, '$..city')
print(len(cities))
salaries = jsonpath.jsonpath(res, '$..salary')
print(len(salaries))
positionNames = jsonpath.jsonpath(res, '$..positionName')
print(len(positionNames))
print(cities, salaries, positionNames, sep='|')
# data = pandas.DataFrame({'职位': positionNames, '地址': cities, '薪水': salaries})
# print(data)
# data.to_excel(f'{kw}.xls', index=None)
for positionName, city, salary in zip(positionNames, cities, salaries):
print(positionName, city, salary)
with open(f'{kw}.csv', 'a', newline='') as f:
csvWriter = csv.writer(f, dialect='excel')
# csvWriter.writerow(['职位', '地址', '薪资'])
csvWriter.writerow([positionName, city, salary])