python 前程无忧岗位信息爬取(以数据清理为主)

一、信息爬取:

网站代码的分析和信息的爬取和上一篇博客大致相同,但是两个网站的代码形式不一样,无忧的代码段是这样的,相对当当的要好提取一些,但是职位的详细信息在下一级链接中,所以需要两步提取,第一步先爬取岗位首页的信息和进入详情页的链接,然后转到详情页进一步爬取其他信息:

    item['t1'] = result.xpath('//div[@class="el"]/p/span/a/text()')  # 岗位名称
    item['t2'] = result.xpath('//div[@class="el"]/span[@class="t2"]/a/text()')  # 公司名称
    item['t3'] = result.xpath('//div[@class="el"]/span[@class="t3"]/text()')  # 工作地点
    item['t5'] = result.xpath('//div[@class="el"]/span[@class="t5"]/text()')  # 发布时间
    item['t6'] = result.xpath('//div[@class="el"]/p/span/a/@href')  # 详情链接

    for ider in range(len(item['t6'])):   #len(item['t6'])
        res_detail = requests.get(item['t6'][ider], headers=headers)
        res_detail.encoding = chardet.detect(res_detail.content)['encoding']
        result_detail = etree.HTML(res_detail.text)

        arr_detail[0].append(result_detail.xpath('string(//div[@class="cn"]/p[@class="msg ltype"])'))  #工作经验、学历、人数
        arr_detail[1].append(result_detail.xpath('string(//div[@class="mt10"]/p[1]/a[1]/text())'))
    item['t7'] = arr_detail[0]
    item['t8'] = arr_detail[1]

这样,就把首页展示的信息和详细的信息封装到一个字典里了。

二、数据清理:

对首页信息的清理只需要把岗位名称前后的空格删除掉就好了:

    for iper in range(len(item['t1'])):
        item['t1'][iper] = item['t1'][iper].strip()  # 去掉岗位名前后的空格

对详细信息的处理主要是编码的替换和字符串的分割,以便下一步写入数据库:

    for iper in range(len(item['t7'])):  # 划分出工作经验等信息
        item['t7'][iper] = item['t7'][iper].replace(u'\xa0', u' ')
        item['t8'][iper] = item['t8'][iper].replace(u'\xa0', u' ')
        item['t7'][iper] = item['t7'][iper].split()
        item['t8'][iper] = item['t8'][iper].strip("\\t")
        item['t8'][iper] = item['t8'][iper].strip("\\n")
        item['t8'][iper] = item['t8'][iper].strip("\\r")
        item['t8'][iper] = item['t8'][iper].strip()

清理前的数据:

                                    销售数据分析                                
深圳市腾讯教育科技有限公司
武汉-江夏区
6-8千/月
07-13
https://jobs.51job.com/wuhan-jxq/115243709.html?s=01&t=0

				武汉-江夏区  |  3-4年经验  |  本科  |  招1人  |  07-13发布			

										业务分析专员/助理									

清理后的数据:

销售数据分析
深圳市腾讯教育科技有限公司
武汉-江夏区
6-8千/月
07-13
https://jobs.51job.com/wuhan-jxq/115243709.html?s=01&t=0
['武汉-江夏区', '|', '3-4年经验', '|', '本科', '|', '招1人', '|', '07-13发布']
业务分析专员/助理

三、数据存储:

同样是存储到数据库mysql,方法不累述,但是在存储过程中出现了两个问题:

1、首页部分有的岗位薪资是空缺的,在存入字典的时候,后面的薪资就会提前一位到这个位置,导致最终字典里岗位名称数量是60个,而薪资数量只有57个,程序报错。

所以,我在开始解析薪资部分代码的时候没有直接爬取薪资的text,而是将整个class爬取出来存放到数组中,这样即使薪资信息为空,对应位置也会是一个结构体无非null,最后在判断一下后存入字典。

    item_salary['t4'] = result.xpath('//div[@class="el"]/span[@class="t4"]')  # 薪资
    for i in range(len(item_salary['t4'])):
        if item_salary['t4'][i].text:
            arr_salary.append(item_salary['t4'][i].text)
        else:
            arr_salary.append("未公布")
    item['t4'] = arr_salary

2、开始的时候没有发现的一个隐藏bug:

在详情页面,有无学历要求也是个变量,也会导致程序报错,所以加了一步判断:

        if item['t7'][iper]:
            if len(item['t7'][iper]) > 7:
                experience = item['t7'][iper][2]
                education = item['t7'][iper][4]
                number = item['t7'][iper][6]
            else:
                experience = item['t7'][iper][2]
                education = "无限制"
                number = item['t7'][iper][4]
        else:
            experience = "数据异常"
            education = "数据异常"
            number = "数据异常"

至此,爬取工作完成。

 

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值