掌握使用lxml和XPath提取HTML数据
课程位置:07.处理数据的方法.pdf - 7.2 lxml和XPath
XPath语法:
// - 选择所有后代节点/ - 选择直接子节点@attr - 选择属性text() - 选择文本内容[@class='name'] - 属性过滤¥5999
库存:100
手机¥12999
库存:50
电脑¥4799
库存:80
平板¥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. 组合提取每个商品的完整信息