P5 【Python爬虫】HTML与Beautiful Soup4 解析

本文介绍了BeautifulSoup4的基本概念及使用方法,并通过一个实际案例——大麦网演出信息爬取,展示了如何利用该库从网页中提取所需数据。

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

目录

1.Beautiful Soup 4 介绍

2.BS4语法讲解

3.爬虫案例:大麦网演出爬虫


1.Beautiful Soup 4 介绍

        Beautiful Soup4(BS4)是Python的一个第三方库,用来从HTML和XML中提取数据。        

        Beautiful Soup4 在某些方面比XPath易懂,但是不如XPath简洁,而且由于它是使用Python开发的,因此速度比XPath慢。

        注意,在安装beautifulsoup4时数字“4”不能省略,因为还有一个第三方库叫beautifulsoup,但是它已经停止开发了。

        导入第三方库:

from bs4 import BeautifulSoup

2.BS4语法讲解

2.1使用bs4获取html内容步骤

一般要经过以下两步:
(1)处理源代码生成BeautifulSoup对象。
(2)使用find_all()或者find()来查找内容。

2.2两种“解析器”:html.parser / lxml

# 可以用html.parser来解析
soup = BeautifulSoup(source, 'html.parser')
# 或者可以用lxml来解析
soup_2 = BeautifulSoup(source, 'lxml')

2.3两种寻找方式find()和find_all()

find()

返回的是一个BeautifulSoup Tag对象,如果有多个符合条件的HTML标签,则返回第1个对象,如果找不到就会返回None。

find_all()

返回的是BeautifulSoup Tag对象组成的列表,如果没有找到任何满足要求的标签,就会返回空列表。

# 2.1 用find()
# 由于HTML中的class属性与Python的class关键字相同,
# 因此为了不产生冲突,BS4规定,如果遇到要查询class的情况,使用“class_”来代替:
info_1 = soup.find(class_='useful')  # 返回None
info_2 = soup.find(class_='test')
info_3 = soup_2.find(class_='useless')  # 返回None
info_4 = soup_2.find(class_='info')
print('返回对象类型:', type(info_1), type(info_3))
print(info_1.string, info_2.string, info_3.string, info_4.string)
print('-------------------------------')

# 2.2 用find_all(name, attrs, recursive, text, **kwargs)
# name就是HTML的标签名,类似于body、div、ul、li
# attrs参数的值是一个字典,字典的Key是属性名,字典的Value是属性值
attrs = {'class': 'useful'}
# recursive的值为True或者False,当它为False的时候,BS4不会搜索子标签。
# text可以是一个字符串或者正则表达式,用于搜索标签里面的文本信息。

content = soup.find_all(text=re.compile('我需要'))
print('用re来find_all:')
for each in content:
    print(each.string)
print('-------------------------------')
# **kwargs表示Key=Value形式的参数。这种方式可以根据属性和属性值进行搜索。
# Key是属性,Value是属性值。
'''
find_all('div', id = 'test')
find_all(class_='iamstrange')
'''
# 对属性值的搜索也可以使用正则表达式:
'''
content = soup.find_all(class_=re.compile('iam'))
for each in content:
    print(each.string)
'''
# 先用find()再用find_all(),先抓大再抓小
info_useful = soup.find('div', attrs=attrs, recursive=True)
info_5 = info_useful.find_all('li')
print('info_5: ')
for i in info_5:
    print(i.string)
# 将BS Tag对象看作字典,将属性名当作Key,获取属性值
useful = soup.find(class_='useful')
all_content = useful.find_all('li')
# 打印完整信息
for li in all_content:
    print(li)
# 打印Value
for li in all_content:
    print(li.string)
# 打印Key
for li in all_content:
    print(li['class'])

完整代码见博主GitHub: WebSpider/html_bs4.py at main · zjw001210/WebSpider · GitHub

3.爬虫案例:大麦网演出爬虫

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小怪的碗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值