智联招聘是国内知名的招聘网站,每天都有大量的企业和职位信息在上面发布。作为求职者,我们可以通过爬取智联招聘的职位信息来获取更多的求职机会,而本文将介绍如何使用Python爬取智联招聘职位信息,以及如何使用多进程提高爬取效率。
一、分析智联招聘的职位信息页面
在爬取数据之前,我们需要分析智联招聘的职位信息页面的HTML结构和请求。
首先,我们从智联招聘的首页进入职位搜索页面,选择搜索条件后,搜索结果页面的URL会发生变化,其中有一部分是关键参数,如搜索关键词和页码,其余部分可能是一些跟踪信息,可以去掉。
例如,输入“Python”作为关键词搜索,第一页的URL为:https://sou.zhaopin.com/?jl=530&kw=Python&kt=3&sf=0&st=0
其中,jl表示搜索的城市(这里是北京),kw表示搜索的关键词(Python),kt表示搜索类型(这里是全文搜索),sf表示工资范围,st表示发布时间。
接着,我们打开浏览器开发工具,切换到“Network”选项卡,可以看到浏览器发送了一些请求,其中最重要的是一个经过加密的请求,它返回了搜索结果页面的HTML内容。我们需要复制这个请求的headers和form data,以便后续的爬取。
二、使用Python爬取智联招聘职位信息
智联招聘的搜索结果页面中包含了许多职位信息,其中包括职位名称、公司名称、薪水范围、工作地点等信息。我们可以使用Python程序从搜索结果页面提取这些信息。
1. 获取搜索结果页面的HTML内容
首先,我们需要构造请求,获取搜索结果页面的HTML内容。代码如下:
```python
import requests
url = "https://fe-api.zhaopin.com/c/i/sou"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
}
params = {
"start": 0,
"pageSize": 90,
"cityId": 530,
"salary": "0,0",
"workExperience": "-1",
"education": "-1",
"companyType": "-1",
"employmentType": "-1",
"jobWelfareTag": "-1",
"kw": "Python",
"kt": "3",
"_v": "0.75390014",
"x-zp-page-request-id": "eae2b2e8b6164c63ab8ef1f887a1b31c-1626506813919-811369",
"x-zp-client-id": "544e448b-79bd-4365-8e54-9d14a8480bfc",
}
data = {
"pageSize": 90,
"jobType": "",
"kw": "Python",
"kt": "3",
"cityId": 530,
"salary": "0,0",
"workExperience": "-1",
"education": "-1",
"companyType": "-1",
"employmentType": "-1",
"jobWelfareTag": "-1",
"sortType": "complex",
"compTag": "",
"requestId": "1626506813919",
"pn": 1,
"expIds": "",
"sid": "sem_pz_bdpc_dasou_title"
}
response = requests.post(url, headers=headers, params=params, data=data)
html = response.content.decode("utf-8")
```
注意,这里使用的URL和请求参数可能跟前面分析的有所不同,因为智联招聘可能会周期性地更新这些参数。
2. 提取关键信息
在得到搜索结果页面的HTML内容之后,我们需要提取其中的关键信息,主要包括职位名称、公司名称、薪水范围、工作地点和职位链接。代码如下:
```python
import re
def extract(html):
pattern = re.compile(r'
r'.*?
r'.*?href="(.*?)"', re.S)
items = re.findall(pattern, html)
results = []
for item in items:
result = {
"title": item[0].strip(),
"company": item[1].strip(),
"salary": item[2].strip(),
"location": item[3].strip(),
"link": item[4].strip(),
}
results.append(result)
return results
results = extract(html)
for result in results:
print(result)
```
3. 构造爬取多页的函数
现在,我们已经可以成功爬取一页的职位信息了,接下来需要使用多进程,构造爬取多页的函数,以提高爬取效率。代码如下:
```python
from multiprocessing import Pool
def crawl_page(page):
url = "https://fe-api.zhaopin.com/c/i/sou"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
}
params = {
"start": (page-1)*90,
"pageSize": 90,
"cityId": 530,
"salary": "0,0",
"workExperience": "-1",
"education": "-1",
"companyType": "-1",
"employmentType": "-1",
"jobWelfareTag": "-1",
"kw": "Python",
"kt": "3",
"_v": "0.75390014",
"x-zp-page-request-id": "eae2b2e8b6164c63ab8ef1f887a1b31c-1626506813919-811369",
"x-zp-client-id": "544e448b-79bd-4365-8e54-9d14a8480bfc",
}
data = {
"pageSize": 90,
"jobType": "",
"kw": "Python",
"kt": "3",
"cityId": 530,
"salary": "0,0",
"workExperience": "-1",
"education": "-1",
"companyType": "-1",
"employmentType": "-1",
"jobWelfareTag": "-1",
"sortType": "complex",
"compTag": "",
"requestId": "1626506813919",
"pn": page,
"expIds": "",
"sid": "sem_pz_bdpc_dasou_title"
}
response = requests.post(url, headers=headers, params=params, data=data)
html = response.content.decode("utf-8")
results = extract(html)
return results
def main():
pool = Pool()
pages = range(1, 11)
results = []
for page in pool.map(crawl_page, pages):
results.extend(page)
for result in results:
print(result)
if __name__ == '__main__':
main()
```
这里,我们使用了multiprocessing模块的Pool类,开启多个进程并行地爬取每一页的职位信息。在主函数中,我们创建了一个长度为10的页码列表,然后使用map函数将crawl_page函数应用到每个页码上,最后将所有结果合并到一个列表中。
四、总结
在本文中,我们介绍了如何使用Python爬取智联招聘的职位信息,并使用多进程提高了爬取效率。实际上,这种爬取方式可以应用于其他类似的招聘网站,只需要针对不同的HTML结构和请求参数进行稍微的调整。同时,也要注意合理地设置请求头和请求参数,避免被反爬机制禁止访问。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复