python 爬取字节内推招聘信息

  今天收到一个任务,用 python 爬取招聘网站信息。招聘网址是这个:https://job.toutiao.com/s/JNcJSRo。打开之后自动跳转到了这里:https://job.bytedance.com/referral/pc/position?token=MzsxNTk0NDQzMDMxOTkzOzY3NzE1NjI2MDc2ODMyNTc4Njk7MA

  常规操作,先审查元素。每一个职位的 title 和职位描述是相同的 class,如果可以得到页面静态内容,就可以把招聘信息保存下来了。

import requests
url = "https://job.bytedance.com/referral/pc/position?token=MzsxNTk0NDQzMDMxOTkzOzY3NzE1NjI2MDc2ODMyNTc4Njk7MA"
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}
resp = requests.get(url,headers=headers)
print(resp.text)

  打印的文本没有发现什么有用信息,很明显,这里的数据都是另外通过 POST 请求获取的。监听一下网络请求,发现了数据来源。

 

  既然可以完整的看到需要的数据,模拟一个一样的请求不就可以了吗。分析后调整代码。

 1 import requests
 2 import json
 3 
 4 def getJobData():
 5     url = "https://job.bytedance.com/api/v1/search/job/posts?keyword=&limit=10&offset=0&job_category_id_list=&location_code_list=&subject_id_list=&recruitment_id_list=&portal_type=1&portal_entrance=1&_signature=7ZAzMgAgEAgBrEgAxo1ege2QMyAALLC"
 6     headers = {
 7     'accept':'application/json, text/plain, */*',
 8     'accept-encoding':'gzip, deflate, br',
 9     'accept-language':'zh-CN',
10     'content-type':'application/json',
11     'cookie':'referral-token=MzsxNTk0NDQzMDMxOTkzOzY3NzE1NjI2MDc2ODMyNTc4Njk7MA; channel=referral; platform=pc; s_v_web_id=kddyb7ab_IRgnUvNC_fthm_45Io_9aFj_nBUcCkZP3U3c; device-id=6856593760391792135; TS01ab245c=015df6ccf27d7fed70cc0134a66cf6caed02d10578dff54bbbb38f2bec5d8d76af64ca121c34e7472fe6ab288bce53c5044a27abf2; SLARDAR_WEB_ID=bb0ff545-72f9-440a-9574-4ea5ae7bb74e; TS0170d300=015df6ccf28055e45208edcc51b025a5ed540a12f025e46e1d8699ecb874d4d16d0dfa4aefe40f75beea5c836bda606eb3839ed21b; atsx-csrf-token=9xQgHaOg5kY17BZGoxQXuM0_B9rT9S17F4ya-z6hxD4%3D',
12     'env':'undefined',
13     'origin':'https://job.bytedance.com',
14     'portal-channel':'referral',
15     'portal-platform':'pc',
16     'referer':'https://job.bytedance.com/referral/pc/position?token=MzsxNTk0NDQzMDMxOTkzOzY3NzE1NjI2MDc2ODMyNTc4Njk7MA',
17     'sec-fetch-dest':'empty',
18     'sec-fetch-mode':'cors',
19     'sec-fetch-site':'same-origin',
20     'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
21     'website-path':'referral',
22     'x-csrf-token':'9xQgHaOg5kY17BZGoxQXuM0_B9rT9S17F4ya-z6hxD4='
23     }
24     data={
25     'keyword':'',
26     'limit':10000,
27     'offset':0,
28     'job_category_id_list':[],
29     'location_code_list':[],
30     'subject_id_list':[],
31     'recruitment_id_list':[],
32     'portal_type':1,
33     'portal_entrance':1,
34     '_signature':'7ZAzMgAgEAgBrEgAxo1ege2QMyAALLC'
35     }
36     param = json.dumps(data)
37     resp = requests.post(url=url,data=param,headers=headers)
38     # 知道为啥打印这个 status 吗?
39     print(resp.status_code)
40     job_data = resp.json()
41     job_list = job_data["data"]["job_post_list"]
42     return job_list
43 
44 def saveFile():
45     fi = open('job.bytedance.data.txt','r+',encoding='utf-8')
46     jobs = getJobData()
47     print("共有职位:" + str(len(jobs)) + "")
48     for i in range(len(jobs)):
49         city = jobs[i]["city_info"]["name"]
50         title = jobs[i]["title"]
51         desc = jobs[i]["description"]
52         requirement = jobs[i]["requirement"]
53         fi.write(city + "-" + title + "\n【职位描述】\n" + desc + "\n【职位要求】\n" + requirement + "\n\n")
54 
55 saveFile()

 

  保存下来的文件有10.5Mb,网页上有1000个分页,每页10条信息,所以直接将请求参数 limit 改成了10000。

  10000个职位,我的天!

  然而没有一个职位属于我。

  ?

  ??

  ???

  继续失业吧。

 

 

 

posted @ 2020-08-03 16:45  原来是李  阅读(753)  评论(0编辑  收藏  举报