本文共 1558 字,大约阅读时间需要 5 分钟。
注:本文本内容为优化后的版本,以下内容已去除:
以下是优化后的文章内容:
最近在为了工作找资料,想了解用人单位的招聘要求,于是我尝试从boss直聘的招聘信息中获取数据作为参考。过程记录如下,仅用于个人理解和技术改进,不会用于任何商业用途。
为了获取更多的招聘信息,需要从boss直聘的网页中提取数据。我发现,招聘信息并不是直接分布在列表页,而是分布在详情页。因此,抓取过程的核心在于如何有效地从列表页获取详情页链接,并从详情页提取有用数据。
爬虫的设计基于以下原则,确保高效率和稳定运行:
第一阶段:获取详情页链接
通过列表页获取职位详情的URL地址。列表页存在多个页码,默认收集最多10页的数据。这部分采用多线程抓取,确保大幅提升抓取速度。第二阶段:解析详情页数据
收到的每个详情页链接都会被解析,提取其中的招聘信息。为了提高效率,本地采用多线程处理,这样可以分别处理不同的页面。数据最终以字典格式存储到data队列中,确保数据结构化,便于后续处理。第三阶段:数据保存
将收集到的招聘信息按照页级分组,保存为JSON文件。每一个JSON文件包含一个列表页的所有招聘信息。这种方式能够使数据分类清晰,便于日后检索。在爬虫过程中,发现列表页的数据获取需要使用get请求。请求参数如下:
query=python&page=1&ka=page-1
其中:
query
表示搜索词page
表示页码ka=page-1
为无效参数,可忽略通过这样的参数不同组合,可以获取不同职位的列表页面。例如,通过修改query
值,可以切换到不同的职位类别。
在列表页中,职位详情的链接都以a标签的形式呈现。可以通过xpath语法提取这些链接的href属性值,获得详情页的URL地址。
例如,对于以下伪代码:
可以用xpath表达为:
xpath_param = '//a/@href'detail_urls = soup.find(converted_location, xpath=xpath_param)
进入详情页后,主要内容通过公司名称、职位名称、工作地点等字段呈现。为了提取这些信息,采用xpath语法对相关div或span标签进行操作。
值得注意的是,某些div中含有
标签,这样的结构会妨碍文本的完整提取。因此,在获取文本时,需要提前用正则表达式剔除这些empty tags。提取完成的数据以字典形式存储到队列中,并通过for循环批量处理。每完成一个列表页的抓取,就将数据按页分组,存储为独立的JSON文件。
以下为JSON示例:
{ "页码": 1, "职位列表": [ { "公司名称": "XXX科技", "职位名称": "iOS开发者", "工作地点": "北京" }, { "公司名称": "XX开源", "职位名称": "前端工程师", "工作地点": "上海" } ]}
为了避免因爬取速度过快被封IP,本地修改了爬虫的速率设置。具体而言,将多线程改为单线程,并在一定循环间隔后启动爬取任务。
以上就是完整的抓取流程设计。虽然看起来有点复杂,但通过合理的搭配和优化,整个过程可以实现自动化数据抓取。这也是为什么我在技术社区发表的类似文章,虽基于相同逻辑,却呈现出不同的表述方式。
转载地址:http://cydrz.baihongyu.com/