BeautifulSoup 入门教程(下)
_Star_Universe_ · · 科技·工程
前情提要:BeautifulSoup 入门教程(上) 已经讲到提取网页中的文本的基本方法,那么笔者就来整理一些更高级的语法。
查找子标签和父标签
你可以通过 parent
和 children
属性访问标签的父标签和子标签:
# 查找当前标签的父标签
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 计划完成的关于网页的日报已全部完成,后续将开始讲游戏制作技巧,敬请期待!