招聘网站信息收集

FindJob

爬取各大招聘公司,将招聘信息保存到本地。

招聘网站

持续更新

传入参数设计

由于这些招聘网站设置的参数不同,统一到本项目中设置两个参数:

1
city: 招聘地点
2
keyword: 搜索关键字(如:java、python、平面设计等等)

同时可以选择其中一个网站获取数据,也可以获得所有网站进行数据获取。

项目结构

  • core
    - boss.py         `boss直聘`
    - QCWY.py       `前程无忧`
    - zhilian.py        `智联招聘`
    • save-data 存储数据
    • utils 工具
    • config.py 配置
    • findjob.py 主文件

代码分析

前程无忧进行代码分析,定义一个QCWY类,构造函数只要传入关键字、城市名称、线程数。

URL分析
通过分析url, 获得相应的信息,这里城市的ID比较难构造,但是通过分析其他文件发现一个JS文件,保存着城市ID和城市之间的关系,通过分析JS文件,将输入的城市名称转换成相应的ID:

1
def _get_city_code(self):
2
    url = 'https://js.51jobcdn.com/in/js/2016/layer/area_array_c.js'
3
    req = requests.get(url, headers=self.header).text
4
    a = req.find(self.city)
5
    return req[a - 9:a - 3]

城市ID


同时获取搜索的页数,并构造相应URL
获取最大页数

1
def _get_max_page(self):
2
        city_code = self._get_city_code()
3
        url = self.baseurl + '{},000000,0000,00,9,99,{},2,1.html'.format(city_code, self.keyword)
4
        req = requests.get(url=url, headers=self.header)
5
        req.encoding = 'gbk'
6
        html = etree.HTML(req.text)
7
        max_page = html.xpath('//*[@id="resultList"]/div[2]/div[5]/text()')[1][3:]
8
        for page in range(1, int(max_page) + 1):
9
            page_url = self.baseurl + '{},000000,0000,00,9,99,{},2,{}.html'.format(city_code, self.keyword, page)
10
            self.pagequeue.put(page_url)

进行上述获得城市ID,获得最大页码后,进行url构造后进行爬取,通过分析用Xpath就行获取相应的信息,获得如下信息

  1. 职位名称
  2. 详细链接
  3. 公司名称
  4. 工作地点
  5. 薪资
  6. 发布时间
  7. 职位信息
  8. 公司信息

获取这些字段,使用csv进行存储。

存在问题

  • Boss直聘存在反爬,导致IP封禁。可以设置IP代理,最近得知正常Boss直聘增加了跳转,需要继续更新。
  • 主文件中,多进程没有起作用,搜索之后,没有解决,请了解的小伙伴就行指教。

项目地址

FindJob
同时推荐给小伙伴我们团队的爬虫项目地址如下:
ECommerceCrawlers