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 @   原来是李  阅读(882)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示