练习8:XPath提取 📕

📋 任务目标

掌握使用lxml和XPath提取HTML数据

💡 知识点回顾

课程位置:07.处理数据的方法.pdf - 7.2 lxml和XPath

XPath语法:

📝 商品列表

iPhone 15

¥5999

库存:100

手机

MacBook Pro

¥12999

库存:50

电脑

iPad Air

¥4799

库存:80

平板

AirPods Pro

¥1999

库存:200

耳机

💡 示例代码

import requests
from lxml import etree

url = 'https://req.haleibc.com/practice8'
response = requests.get(url)

# 解析HTML
html = etree.HTML(response.content)

# 提取所有商品名称
names = html.xpath('//h3[@class="product-name"]/text()')
print("商品名称:", names)

# 提取所有价格
prices = html.xpath('//p[@class="product-price"]/text()')
print("价格:", prices)

# 提取所有库存
stocks = html.xpath('//p[@class="product-stock"]/text()')
print("库存:", stocks)

# 提取所有分类
categories = html.xpath('//span[@class="product-category"]/text()')
print("分类:", categories)

# 提取data-id属性
ids = html.xpath('//div[@class="product-item"]/@data-id')
print("商品ID:", ids)

# 组合提取
products = []
product_divs = html.xpath('//div[@class="product-item"]')
for div in product_divs:
    product = {
        'name': div.xpath('.//h3[@class="product-name"]/text()')[0],
        'price': div.xpath('.//p[@class="product-price"]/text()')[0],
        'category': div.xpath('.//span[@class="product-category"]/text()')[0],
        'id': div.xpath('./@data-id')[0]
    }
    products.append(product)
    print(product)

✅ 练习任务

1. 使用XPath提取所有商品名称

2. 使用XPath提取所有价格

3. 使用XPath提取data-id属性

4. 使用XPath提取data-category属性

5. 组合提取每个商品的完整信息

返回练习列表 下一个练习 →