爬取某招聘网数据之BS4

bs4爬取某招聘数据

一.更新pip在安装源:
1.打开文件资源管理器
2.地址栏上面输入%appdata%
3.在这个文件里面新建一个pip文件夹
4.在pip文件夹里面新建一个pip.ini文件,内容如下:

[global]
timeout=6000
index-url = https://mirrors.aliyun.com/pypi/simple
trusted-host = mirrors.aliyun.com  # 这里安装的是阿里云的源

二.bs4的基础知识:
(1):生成对象
本地对象
soup=BeautifulSoup(open(‘test.html’,encoding=‘utf8’,‘lxml’)
转化为网络文件,lxml解析
soup = BeautifulSoup(‘字符串类型或者字节类型’,‘lxml’)
1.根据标签名查找

soup.a  # 只能找到第一个符合要求的标签

2.获取属性

soup.a.attrs  # 获取所有属性和值,返回一个字典
soup.a['href']  # 获取href属性

3.获取内容

soup.a.text  
soup.a.string
soup.a.get_text()
# 如果标签里面还有标签,那么string获取的结果为None,而其它两个可以获取文本内容

4.find

# 举例
print(soup.find('a',alt='xxx'))  # 获取a标签并且alt属性值为xxx的a
print(soup.find('a',class_='xxx'))  # 获取a标签并且class属性值为xxx的a

5.find_all

# find_all和find类似
# 例子
print(soup.find_all('a')) # 获取所有的a标签的第一个,返回的是一个列表
print(soup.find_all(['a','b'])  # 获取所有的a标签和所有的b标签的第一个,可以像find一样用
print(soup.find_all('a',limit=2)  # 限制前两个

6.select
select是根据选择器来查找,但是一定要记住它返回的是一个列表(重点)
三.爬取代码:

from bs4 import BeautifulSoup
import urllib.request
import urllib.parse
import xlwt  # 将爬取的数据写入到表格文件里面

class ZhiLianZhaoPin(object):
    # 基本url
    url = 'https://xiaoyuan.zhaopin.com/search/jn=4&jt=45,47,48,53,54,57,79,317,665,666,667,668,669,671,672,679,687,861,863,864,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,407,49,692,694,695,696,868,2063,2064,2065,316,552,556,670,689,841,41,51,55,59,315,388,389,551,678,690,698,699&city=489&'

    def __init__(self, start_page, endpage):
        self.start_page = start_page  # 起始页码
        self.end_page = end_page  # 结束页码
        self.zhaopin_data_list = []  # 存放字典数据

    def handlerequest(self, page):
        headers = {
            'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54',
        }
        # 解析输入的参数,搜索框有中文时,可以直接用字典,再用urllib.parse.urlencode()进行解析,最后在拼接,
        # 如果没有中文,地址可以直接拼接
        data = {
            'pg':page,
        }
        # 转换拼接的代码
        query_url = self.url + urllib.parse.urlencode(data)
        # 获取请求对象
        request = urllib.request.Request(headers=headers,url=query_url)
        # 获取响应对象
        resp = urllib.request.urlopen(request)
        return resp

    # 获取相应属性的值
    def parse_data(self,content):
        soup = BeautifulSoup(content,'lxml')
        presentation_item = soup.find_all('div',class_="presentation-item")
        for data in presentation_item:
            # 定义一个字典,存放相应的属性
            zhaopin_data_dict = {}
            # title为招聘的标题
            zhaopin_data_dict['title'] = data.find('div',class_='fn-clear').select('.position')[0].text  # select查到的的返回数据类型是列表对象
            # type为招聘的类型
            zhaopin_data_dict['type'] = data.find('div',class_='fn-clear').select('.source')[0].text
            # company为招聘是哪一家公司
            zhaopin_data_dict['company'] = data.find('div',class_='fn-clear').select('.company')[0].text
            # city为招聘的城市
            zhaopin_data_dict['city'] = data.select('p')[0].find('span',class_='city').text[4:]
            # num为招聘的人数
            zhaopin_data_dict['num'] = data.select('p')[0].find('span',class_='num').text[6:]
            # time为什么时候发布的
            zhaopin_data_dict['time'] = data.select('p')[0].find('span',class_='time').text[5:]
            # 把每一个字典存入一个列表中到
            self.zhaopin_data_list.append(zhaopin_data_dict)

    def run(self):
        # 得到每一页的数据
        for pg in range(start_page, end_page+1):
            resp = self.handlerequest(pg)
            self.parse_data(resp.read().decode())

    def write_xlxs(self):
        work_book = xlwt.Workbook()
        sheet = work_book.add_sheet('dd',cell_overwrite_ok=True)
        m = 0
        for dict_ in self.zhaopin_data_list:
            i = 0
            for d in dict_.values():
                sheet.write(m,i,d)  # 写到第m行i列的位置上,d为数据
                i += 1
            m += 1
        work_book.save('data.xls')  # 保存数据



if __name__ == '__main__':
    start_page = int(input("请输入起始页:"))
    end_page = int(input("请输入结尾页:"))
    zhaopin = ZhiLianZhaoPin(start_page, end_page)
    print("得到数据")
    zhaopin.run()
    print("写入文件")
    zhaopin.write_xlxs()
    print("结束写入")

知识点和心得:bs4是用来解析数据的,只有具备了基础知识,后面的一些小爬虫案列才能很容易写下来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值