python爬取智联招聘职位信息(多进程)

智联招聘是国内知名的招聘网站,每天都有大量的企业和职位信息在上面发布。作为求职者,我们可以通过爬取智联招聘的职位信息来获取更多的求职机会,而本文将介绍如何使用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/

    点赞(119) 打赏

    评论列表 共有 0 条评论

    暂无评论
    立即
    投稿
    发表
    评论
    返回
    顶部