BeautifulSoup 入门教程(下)

· · 科技·工程

前情提要:BeautifulSoup 入门教程(上) 已经讲到提取网页中的文本的基本方法,那么笔者就来整理一些更高级的语法。

查找子标签和父标签

你可以通过 parentchildren 属性访问标签的父标签和子标签:

# 查找当前标签的父标签
parent_tag = first_link.parent
# 查找当前标签的子标签
children = first_link.children

获取父标签一般格式为 parent_ = example.parent,子标签同理。

from bs4 import BeautifulSoup
import requests

url = 'https://www.baidu.com/'

response = requests.get(url)
response.encoding = 'utf-8'

soup = BeautifulSoup(response.text, 'lxml')

first_link = soup.find('a')
print(first_link)
print("----------------------------")
# 获取当前标签的父标签
parent_tag = first_link.parent
print(parent_tag.get_text())

输出结果大概是这样:

<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
----------------------------
 新闻 hao123 地图 视频 贴吧  登录   更多产品

查找具有特定属性的标签

你可以通过传递属性来查找具有特定属性的标签。

例如,下面这段代码中前两行查找类名为 example-class 的所有 div 标签:

# 查找所有 class="example-class" 的 <div> 标签
divs_with_class = soup.find_all('div', class_='example-class')
# 查找具有 id="unique-id" 的 <p> 标签
unique_paragraph = soup.find('p', id='unique-id')

无论是 soup.find_all() 还是 soup.find(),括号里都先填查找标签,后面填属性(类名)。

举个例子,百度首页的“百度一下”按钮对应的 HTML 代码中,id 为 su。

from bs4 import BeautifulSoup
import requests

url = 'https://www.baidu.com/' 

response = requests.get(url)
response.encoding = 'utf-8'

soup = BeautifulSoup(response.text, 'lxml')

# 查找具有 id="unique_input" 的 <input> 标签
unique_input = soup.find('input', id='su')

input_value = unique_input['value'] # 获取 input 输入框的值

print(input_value)

输出结果显然就是按钮的名称:

百度一下

高级用法

CSS 选择器

BeautifulSoup 也支持通过 CSS 选择器来查找标签。

# 使用 CSS 选择器查找所有 class 为 'example' 的 <div> 标签
example_divs = soup.select('div.example')

# 查找所有 <a> 标签中的 href 属性
links = soup.select('a[href]')

查找所有 class 为 example<div> 标签,本质上是找所有某属性的某标签;查找 <a> 标签中的 href 属性,本质上是找某标签中的某属性。

修改网页内容

BeautifulSoup 允许你修改 HTML 内容。

我们可以修改标签的属性、文本或删除标签:

# 修改第一个 <a> 标签的 href 属性
first_link['href'] = 'http://new-url.com'

# 修改第一个 <p> 标签的文本内容
first_paragraph = soup.find('p')
first_paragraph.string = 'Updated content'

# 删除某个标签
first_paragraph.decompose()

不再过多赘述,请读者记住代码的一般形式。

转换为字符串

将解析的 BeautifulSoup 对象转换回 HTML 字符串:

html_str = str(soup) # 转换为字符串

BeautifulSoup 属性与方法

见我标记的一栏。这篇文献在本文做了大量引用,对此网站表示感谢,如有侵权欢迎联系我删除。

后记

至此 _StarUniverse 计划完成的关于网页的日报已全部完成,后续将开始讲游戏制作技巧,敬请期待!