Python爬虫之BeautifulSoup详解

Beautiful Soup(以下简称BS)是Python中最为流行的HTML和XML解析库之一。它的主要目的是从HTML或XML中提取数据。相比于Python内置的HTML解析库,BS提供了更加简单易用的API,使得编写爬虫或者数据清洗的工作更加高效、简单。

1.安装

BS是Python的第三方库,可以使用pip在命令行中安装:

pip install beautifulsoup4

2.解析器

BS支持多种解析器,但大体上分为两类:

  • Python标准库的解析器

    Python标准库中提供的XML解析器(xml.parser)和HTML解析器(html.parser)。这两种解析器都是基于Python的内置库,因此无需额外安装。

  • 第三方解析器

    BS通过扩展Python标准库的解析器,还支持其他的第三方解析器,如lxml、html5lib等。这些解析器通常需要安装相应的库,如lxml库、html5lib库等。

3.基本用法

使用BS进行HTML解析的基本步骤如下:

  • 引入库:在Python文件中使用BS,首先需要引入库,如下所示:
from bs4 import BeautifulSoup

  • 创建对象:创建一个BeautifulSoup对象,解析需要解析的HTML或XML文本。
html_doc = """
<!DOCTYPE html>
<html>
<head>
	<title>Example HTML Document</title>
</head>
<body>
	<h1>Heading 1</h1>
	<div class="container">
		<p class="text">This is a paragraph.</p>
		<a href="http://www.example.com">This is a link.</a>
		<p class="text">This is another paragraph.</p>
	</div>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')

这里,我们首先定义一个HTML文档,然后将其作为参数传递给BeautifulSoup构造函数,同时还需要指定解析器,这里使用Python的HTML解析器(html.parser)。

  • 解析文本:BeautifulSoup对象会将HTML解析成一颗DOM树,我们可以通过一些方法来获取它的元素,如下所示:
soup.title  # 获取HTML页面的title
soup.title.string  # 获取title标签的文本内容
soup.a  # 获取HTML页面中的第一个a标签
soup.find_all('a')  # 获取HTML页面中所有的a标签

4.标签选择器

BS提供了多种方法来选择HTML文档中的标签。最常用的方法是使用标签名来选择标签。

soup.a  # 获取HTML页面中的第一个a标签
soup.find_all('a')  # 获取HTML页面中所有的a标签

上面这两个方法都只能获取a标签的第一个实例。如果想获取所有a标签的文本内容,可以使用下面的代码:

for link in soup.find_all('a'):
    print(link.get('href'))

在find_all函数中传递标签名作为参数,就可以获取HTML页面中所有的该标签实例。另外,可以通过指定属性来筛选标签。如果需要找到所有class="text"的标签,可以使用下面的代码:

for tag in soup.find_all(class_='text'):
    print(tag.name, tag.text)

5.CSS选择器

除了标签选择器之外,BS还支持使用CSS选择器来选择HTML文档中的元素。可以在方法中传递一个CSS选择器的字符串作为参数,如下所示:

# 获取class="text"的p标签
soup.select('p.text')

# 获取class="container"下的所有标签
soup.select('.container *')

# 获取a标签中包含example.com字符串的标签
soup.select('a[href*="example.com"]')

6.API

除了上述方法之外,BS还提供了其他一些常用的API,如下所示:

  • get_text()

    get_text()函数可以用来获取标签内的文本内容,它将返回一个字符串。

tag = soup.find('p')
print(tag.get_text())

  • get()

    get()函数可以用来获取标签的属性值,它接受一个属性名作为参数,将返回该属性的值。

tag = soup.find('a')
print(tag.get('href'))

  • attrs

    attrs属性是一个字典,包含了标签的所有属性名和属性值。

tag = soup.find('a')
print(tag.attrs)

  • contents

    contents属性是标签的子节点列表,包括字符串和其他标签。

tag = soup.find('div')
print(tag.contents)

  • parent

    parent属性是标签的父节点,如果没有父节点则返回None。

tag = soup.find('p')
print(tag.parent.name)

7.总结

BS是Python中一款非常流行的HTML和XML解析库,其提供了简单易用的API和丰富的功能,使得我们可以快速地对HTML文档进行解析和数据提取。掌握BS的基本用法和常用API可以帮助我们更加高效地开发爬虫、数据清洗和数据分析等工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

然然学长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值