FindJob
爬取各大招聘公司,将招聘信息保存到本地。
招聘网站
持续更新
传入参数设计
由于这些招聘网站设置的参数不同,统一到本项目中设置两个参数:
city: 招聘地点
keyword: 搜索关键字(如:java、python、平面设计等等)
同时可以选择其中一个网站获取数据,也可以获得所有网站进行数据获取。
项目结构
- core
- boss.pyboss直聘
- QCWY.py前程无忧
- zhilian.py智联招聘
- save-data
存储数据
- utils
工具
- config.py
配置
- findjob.py
主文件
代码分析
以前程无忧
进行代码分析,定义一个QCWY
类,构造函数只要传入关键字、城市名称、线程数。
通过分析url, 获得相应的信息,这里城市的ID比较难构造,但是通过分析其他文件发现一个JS文件,保存着城市ID和城市之间的关系,通过分析JS文件,将输入的城市名称转换成相应的ID:
def _get_city_code(self):
url = 'https://js.51jobcdn.com/in/js/2016/layer/area_array_c.js'
req = requests.get(url, headers=self.header).text
a = req.find(self.city)
return req[a - 9:a - 3]
城市ID
同时获取搜索的页数,并构造相应URL
获取最大页数
def _get_max_page(self):
city_code = self._get_city_code()
url = self.baseurl + '{},000000,0000,00,9,99,{},2,1.html'.format(city_code, self.keyword)
req = requests.get(url=url, headers=self.header)
req.encoding = 'gbk'
html = etree.HTML(req.text)
max_page = html.xpath('//*[@id="resultList"]/div[2]/div[5]/text()')[1][3:]
for page in range(1, int(max_page) + 1):
page_url = self.baseurl + '{},000000,0000,00,9,99,{},2,{}.html'.format(city_code, self.keyword, page)
self.pagequeue.put(page_url)
进行上述获得城市ID,获得最大页码后,进行url构造后进行爬取,通过分析用Xpath就行获取相应的信息,获得如下信息
- 职位名称
- 详细链接
- 公司名称
- 工作地点
- 薪资
- 发布时间
- 职位信息
- 公司信息
获取这些字段,使用csv进行存储。
存在问题
- Boss直聘存在反爬,导致IP封禁。可以设置IP代理,
- 主文件中,多进程没有起作用,搜索之后,没有解决,请了解的小伙伴就行指教。
项目地址
FindJob
同时推荐给小伙伴我们团队的爬虫项目地址如下:
ECommerceCrawlers
网友评论