步骤分析
- 访问URL地址
- 查看网页源代码发现职位信息为动态加载
- 通过开发者工具查看
xhr
请求,发现json
数据地址为https://gate.lagou.com/v1/neirong/positions/mark_info?positionIds=......
,将地址复制到浏览器,出现您操作太频繁,请稍后访问
之类的数据,无法查看完整数据 - 向web中的地址发送请求,获取
cookies
和session
信息 - 使用
POST
方式将之前获取的cookies
,session
,headers
作为参数,重新向真实的json
数据地址发送请求 - 获取到
json
数据 - 通过
json.loads()
将json
数据装换成python
字段的数据类型,方便解析
具体代码如下:
import requests
import time
def main(pages):
# 通过访问主网页获取cookies和session
url1 = 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='
# 提交ajax请求,获取json数据
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来决定获取多少页的json数据
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(4)
print(respon.text)
# 获取前两页的职位json信息
main(3)
# 结果如下:
# {"resubmitToken":null,"requestId":null,"msg":null,"success":true,"content":{"hrInfoMap":{"6187967":{"userId":11765418,"phone":null,"positionName":"招聘经理",........."pageSize":15},"code":0}