前面已经用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了。