1. 提取文本的方法简介
今天我们将学习如何从 HTML 元素中提取有价值的文本数据和属性。收起你的砍刀吧,因为有了 BeautifulSoup,写代码的工作就像秋天在果园里散步,苹果都在等着你去摘。准备好收获学习的成果了吗?那我们开始吧!
提取 HTML 元素中文本的方法是我们列表中的第一项。在开始提取文本之前,让我们加载页面。
import requests
from bs4 import BeautifulSoup
# 加载页面的 HTML 代码
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
现在我们有了包含 HTML 文档树结构的 soup 对象。让我们从某个标签元素中提取文本,比如标题。
方法 .text 和 get_text()
属性 .text 和它的同类方法 get_text() 能获取元素(包括所有子元素)的文本内容。
# 提取找到的第一个 h1 标签的文本
h1_tag = soup.find('h1')
print(h1_tag.text) # 或者 h1_tag.get_text()
试试看:用我们之前学到的搜索方法找到其他元素,从中提取文本。你会惊讶于能获取到多少信息!
2. 提取属性值
文本固然重要,但有时候重要的数据藏在属性里,就像护照藏在口袋里。想象一下,如果你需要获取链接的地址或者获取图片的 URL(别问我为什么要这样做,也许是为了收集猫咪图片)。
提取属性值
假设我们有一个链接元素 <a href="https://example.com">Example</a>。我们如何获取 href 的值呢?这很简单。
# 提取链接
a_tag = soup.find('a')
link = a_tag['href']
print("链接:", link)
这段代码提取了 href 属性的值。其他有用的属性你也可以用同样的方法提取。
尝试提取图片
提取图片的 URL 也同样简单。看下面这个例子: <img src="image.jpg" alt="猫咪">。
# 提取图片 URL
img_tag = soup.find('img')
image_url = img_tag['src']
print("图片 URL:", image_url)
使用 BeautifulSoup 的美妙之处在于,它能轻松找到和提取数据,而不需要我们去关心 HTML 结构是如何运作的。
3. 文本和属性提取实例
是时候举例了。让我们来做个稍微复杂点的事情:提取页面上的所有链接以及链接标签中的文本内容。
示例:提取所有包含文本的链接
# 找到所有 a 标签
a_tags = soup.find_all('a')
# 输出链接和文本
for a_tag in a_tags:
link = a_tag['href']
text = a_tag.get_text()
print(f"文本: {text}, 链接: {link}")
如你所见,方法 find_all 可以方便地找到所有满足搜索条件的元素,而 for 循环可以遍历每一个元素。
4. 错误处理
别忘了处理错误。有时候 HTML 结构可能不是你预期的样子,或者某个元素可能没有预期的属性。确保你的代码在这种情况下不会“崩溃”。
# 提取属性时的错误处理示例
try:
link = a_tag['href']
except KeyError:
link = None
print("未找到 href 属性!")
这会让脚本更稳健,即使遇到某些隐式错误也不会停止运行。
5. 实际应用
2019 年,一位俄罗斯企业家分享了他的公司如何通过数据抓取业务年收入达到 2000 万卢布的故事。他提到,自动化信息收集不仅没有限制竞争,反而帮助企业适应市场。
例如,有一位客户订购了一个抓取工具,用于每天从供应商网站上收集商品库存信息,从而能够及时更新自己网店的库存和价格。企业家还强调,尽管一些网站试图增加抓取难度,现代技术依然能够有效绕过这些障碍,为企业提供必要的数据支持战略决策。
GO TO FULL VERSION