Python爬取51jobs之数据清洗(3)

 

前面已经用get_webpage方法获取网站,下面说一说如何从网站信息中过滤出我想要的信息(招聘公司,招聘信息,薪水)。

以一个公司招聘网站为例子,

ur=‘https://jobs.51job.com/hangzhou-jgq/104504900.html?s=01&t=0’

’我们要获取这3个地方的文本信息

首先导入requests模块,写上请求头

import requests
import re
from bs4 import BeautifulSoup


def data_cleaning():
    user_agent = 'Mozilla/4.0 (compatible;MSIE 5.5; Windows NT)'
    headers = {
        'User-Agent': user_agent
    }
    url = "https://jobs.51job.com/hangzhou-jgq/104504900.html?s=01&t=0"
    r = requests.get(url, headers)
    soup = BeautifulSoup(r.text, 'html.parser', exclude_encodings="utf-8")

上面都是爬虫基础的,随便百度一下就行,简单来说,soup就是你在网页按F12出来的HTML代码。

接着在利用正则,BS4模块获取目的信息

整理如下:

def data_cleaning():
    ....  # 省略之前写的
    # 1,公司名称
    sname = soup.find_all(class_='catn')[0]['title']  
    # 2,职位信息
    directory = soup.find_all(class_='bmsg job_msg inbox')[0]  # 返回一个<class 'bs4.element.Tag'>
    # TypeError: 'NoneType' object is not callable
    job_datas = str(directory).replace("\n", "")
    pattern = re.compile('<div class="bmsg job_msg inbox">(.*?)<div', re.S)
    job_data = re.findall(pattern, job_datas)
    job_data = job_data[0].replace('<p>', '').replace('</p>','\n')
    # 3,月薪
    job_salary = soup.find_all(class_='cn')[0].strong.text
    return  sname,job_data,job_salary

值得注意的是:

job_datas = str(directory).replace("\n", "")

首先:directory = soup.find_all(class_='bmsg job_msg inbox')[0]返回的是一个元素,到底在Python里面算什么(NoneType),反正不是字符串,所以首先要将directory转换为字符串

然后directory其实还有很多换行符“/n”在你调试的时候并不会显示,但你在正则匹配的时候它又确确实实存在,所以为了方便消除换行符,用字符串的replace方法

后续只要将sname,job_data,job_salary存入MySQL数据库就算基本OK了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值