网页解析

使用BeautifulSoup解析HTML结构

什么是BeautifulSoup?

BeautifulSoup是一个强大的HTML/XML解析库,它能够将复杂的HTML文档转换成一个树形结构, 让我们可以轻松提取需要的数据。就像一个智能的网页阅读器,能够准确找到我们需要的信息。

# 安装BeautifulSoup
pip install beautifulsoup4
pip install lxml

# 基础使用
from bs4 import BeautifulSoup
html = "<html><body><h1>标题</h1></body></html>"
soup = BeautifulSoup(html, 'lxml')
print(soup.h1.text)  # 输出:标题

常用解析方法

find()方法

查找第一个匹配的元素

soup.find('div', class_='content')

find_all()方法

查找所有匹配的元素

soup.find_all('a', href=True)

CSS选择器

使用CSS语法选择元素

soup.select('div.article > h2')

获取属性

提取标签属性值

link.get('href')

小美的商品信息爬取

小美开了一家网店,需要了解竞争对手的商品信息。她发现某电商网站的商品页面结构很规律, 于是决定用BeautifulSoup来提取商品名称、价格和评分信息。

示例HTML结构

<div class="product">
  <h3 class="name">iPhone 15</h3>
  <span class="price">¥5999</span>
  <div class="rating">4.8</div>
</div>

解析代码

soup = BeautifulSoup(html, 'lxml')
products = soup.find_all('div', class_='product')

for product in products:
    name = product.find('h3', class_='name').text
    price = product.find('span', class_='price').text
    rating = product.find('div', class_='rating').text
    print(f"{name} - {price} - 评分:{rating}")

小美的收获:BeautifulSoup让我能够精确提取每个商品的关键信息, 现在我每天只需要运行一次程序,就能获取最新的市场数据!

8个练习题

练习1:基础解析

解析简单的HTML,提取所有段落标签的文本内容。

# 目标:使用BeautifulSoup解析HTML中的<p>标签

练习2:属性提取

从HTML中提取所有超链接的href属性值。

# 提示:使用find_all('a')和get('href')

练习3:CSS选择器

使用CSS选择器提取特定class的元素内容。

# 目标:soup.select('.article-title')

练习4:嵌套结构

解析嵌套的HTML结构,提取多层级的数据。

# 提示:处理div > ul > li的嵌套结构

练习5:表格数据

从HTML表格中提取行和列的数据。

# 目标:解析<table>标签中的数据

练习6:图片链接提取

提取网页中所有图片的src属性。

# 提示:find_all('img')和get('src')

练习7:文本清理

清理提取的文本内容,去除多余空格和特殊字符。

# 提示:使用strip()和正则表达式

练习8:结构化数据

将解析的数据组织成字典或列表格式。

# 目标:将数据转换为[{'name': '...', 'price': '...'}]

在线练习

HTML解析器