爬拉钩的时候发现平常的爬取思路走不通,往headers里边加上cookie,Referer,Accept,User_Agent之后返回的responsre都是“status false msg "您操作太频繁,请稍后再访问" clientIp "117.136.107.190"”,然后就把参数更详细的添加进去发现也不好用,然后查资料看到了别人用requests,尝试了一下果然可以。
仔细看琢磨一下拉钩的网页发现它加载的时候有一个url专门返回除了招聘信息以外的其它东西,加载招聘信息的时候会产生另外一个ajax请求,请求返回的正是我们想要的内容,只需要在先发送主请求,之后用requests.Session()建立Session,建立完成session之后通过session来获取cookie,拿到cookie就可以直接用了,但是这种相当于每次循环都打开一次浏览器,效果还不是很理想。
参考:https://blog.csdn.net/m0_43400362/article/details/88396490
源码如下:
import requests
import time
def main(pages):
# 主url
url1 = 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='
# ajax请求
url = "https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false"
# 请求头
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Referer': 'https://www.lagou.com/jobs/list_python?px=default&city=%E5%85%A8%E5%9B%BD',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
'Host': 'www.lagou.com'
}
# 通过data来控制翻页
for page in range(1, pages):
data = {
'first': 'false',
'pn': page,
'kd': 'python'
}
s = requests.Session() # 建立session
s.get(url=url1, headers=headers, timeout=3)
cookie = s.cookies # 获取cookie
respon = s.post(url = url, headers=headers, data=data, cookies=cookie, timeout=3)
time.sleep(7)
print(respon.text)