[Python] scrapy + selenium 抓取51job 职位信息(实现 传参 控制抓取 页数+职位名称+城市)

本文介绍了使用Python的Scrapy和Selenium框架抓取51job网站上的职位信息,包括目标设定、网页分析和代码实现。在代码实现部分,作者分享了在城市选择上遇到的挑战和解决方案,以及代码优化,如字段格式调整、去除特殊空白字符等。最后,提到了如何在pipelines.py中定义存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

 

一、目标

二、51job网页分析:

1.网页构成观察

2.网页分析

三、代码实现

1. 踩过的坑-----实现城市选择

2.代码实现

3.代码优化

1)存放格式优化

 2)在爬虫中去掉\xa0\xa0

3)用normalize-space(节点)去掉\r\n\t

4.pipelines.py 定义存储


一、目标

实现 通过传参(职位和地区)控制抓取51job职位信息。

抓取内容包括:职位名称、薪资、招聘公司、福利待遇、城市区域、经验要求、学历要求、招工人数、招聘信息发布时间、公司地址、岗位职责、任职要求、公司性质、公司规模和招聘公司所在行业。

二、51job网页分析:

1.网页构成观察

搜索入口1:

搜索入口2: 

抓取页面: 

2.网页分析

搜索入口:

观察比较两个搜索入口,都可以输入职位名称和选取地区,而 https://search.51job.com/ 显然比首页更靠近抓取的信息,所以起始页面选择https://search.51job.com/

抓取内容:

获取每一个岗位链接,进入详情页抓取目标字段内容。

观察过详情页的内容后,将抓取字段确定为:

  • title:职位名称
  • salary:薪资
  • company: 公司名称
  • req(request): 招聘简介(包括城市区域、经验要求、招工人数和发布时间)
  • welfare: 福利
  • job_info: 职位信息(包括岗位职责和岗位要求(即任职要求))
  • contact_info: 公司地址
  • nature:公司性质
  • size:公司规模
  • industry: 公司行业

三、代码实现

1. 踩过的坑-----实现城市选择

尝试1:

原本想用selenium+click的方法实现.

通过观察源代码发现点击左边的大写城市首字母,右边的城市会对应更新,试着用selenium将左边首字母全部点击一边,将右边含有城市text的tr标签全部刷新出来。试图以text匹配传入的城市参数,如果匹配上就click该标签来实现城市的选择,(不得不说这是个很烂的想法,)失败了

 尝试2:

试图通过setattribute()的方法更改表示城市的value值,也失败了

这次尝试的结果是value值可以更改,但是对于搜索来说不起作用

尝试3:

不气馁,继续找!!!

最终发现实际上起到决定作用的是这串阿拉伯数字的value值。虽然我本次只抓取北上广深四个城市的职位信息,找到这四个城市对应的数字代码自己建个dict就可以爬取了。但是还是想找找一劳永逸的方法~

最终找到一个这样的网址  https://m.51job.com/ ,看起来好像手机端的页面(忘记怎么找到的了,写文章的时候又回页面上去找,就是找不到……只能直接贴结果了。。。)

这个页面可以获取到所有城市对应的数字代码。

这个问题解决了,接下来的就水到渠成了!


2.代码实现

爬取所有城市对应数字代码,保存到本地csv中。只需要爬取一次就可以了,需要的时候可以用读取本地csv的方式使用。

def saveID():
    if os.path.exists('areaID.csv'): # 如果存在areaID.csv就停止执行此函数
        return
    else: # 如果不存在就爬取ID 并保存csv
        browser = webdriver.Chrome()
        url = 'https://m.51job.com/'
        browser.get(url)
        browser.refresh()
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值