【Python爬虫】使用etree进行XPath解析

【Python爬虫】使用etree进行XPath解析

一、相关知识

etree的使用

编码流程
  1. 将HTML文本加载到etree对象中
  2. 调用etree的xpath()函数完成标签定位
  3. 对标签为所欲为(此时获得的标签其实是xpath()函数返回的对象)
环境安装

pip install lxml

实例化etree对象
# 首先导入模块
from lxml import etree
  1. 从本地加载HTML
    filePath = '你的HTML文件路径'
    tree = etree.parse(filePath)
    
  2. 从响应数据加载HTML
    url = '某个网址'
    respose = requests.get(url)
    tree = etree.HTML(respose.text)
    

XPath语法

XPath相关知识详见:https://www.runoob.com/xpath/xpath-syntax.html

注:

  • /text()获取的是标签直系文本
  • //text()获取的是标签下所有文本

二、实例 - 爬取全国城市名称

🔍网页分析

背景介绍

要爬取的网站:https://www.aqistudy.cn/historydata/
这是个提供城市pm2.5相关数据的网站,可以看到我们想要的城市名都在下面啦在这里插入图片描述

页面分析

网站结构还是非常清晰的,每个首字母对应的所有城市在一个<ul>标签中
在这里插入图片描述
所以目标就很明确了,定位到每个城市对应的<a>标签,获取标签文本即可
在这里插入图片描述
先定位<ul>标签,发现热门城市和全部城市下面的<ul>class属性是相同的,顺着父节点往上找,,,思路如下

  1. <div class="bottom">相同
  2. <div class="top">相同
  3. <div class="hot"><div class="all">不同!

于是我们可以这样写xpath://div[@class='all']//ul
在这里插入图片描述

当然定位方式有多种,大家可以ctrl+F输入xpath来测试语句是否正确,比如
在这里插入图片描述

💻代码

代码非常简单,就不多解释啦

from lxml import etree
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62'
}
url = 'https://www.aqistudy.cn/historydata/'
res = requests.get(url=url, headers=headers)

# 将相应数据加载到etree对象
tree = etree.HTML(res.text)
# 获取每个首字母开头的所有城市的<ul>标签
ul_list = tree.xpath("//div[@class='all']//ul")

# 循环每一个<ul>标签,并添加到city_list列表中
city_list = []
for ul in ul_list:
    city_list += ul.xpath('.//a/text()')
    
# 输出结果
print(city_list)

》输出 》
在这里插入图片描述

  • 20
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python爬虫中的bs4和xpath是两种常用的数据提取工具。 bs4(Beautiful Soup 4)是一个基于Python的库,用于解析HTML和XML文档。它能够帮助我们从网页中提取数据并进行处理。bs4提供了一些简单且易于使用的方法,例如通过标签名、类名、属性等进行查找和筛选数据。 下面是一个简单的使用bs4进行数据提取的例子: ```python from bs4 import BeautifulSoup import requests # 发送HTTP请求获取页面内容 url = "http://example.com" response = requests.get(url) html_content = response.content # 使用bs4解析页面内容 soup = BeautifulSoup(html_content, 'html.parser') # 提取数据 title = soup.title.text print("网页标题:", title) # 查找某个标签并获取其文本内容 h1 = soup.find("h1") print("h1标签内容:", h1.text) # 查找所有的链接并输出链接文本和URL links = soup.find_all("a") for link in links: print("链接文本:", link.text) print("链接URL:", link["href"]) ``` 另一方面,XPath是一种用于选择XML文档中节点的语言。在爬虫中,我们可以使用XPath来从HTML或XML文档中提取数据。XPath提供了强大且灵活的选择器,可以使用路径表达式来定位节点。 下面是一个使用XPath进行数据提取的示例: ```python import requests from lxml import etree # 发送HTTP请求获取页面内容 url = "http://example.com" response = requests.get(url) html_content = response.content # 使用lxml解析页面内容 tree = etree.HTML(html_content) # 提取数据 title = tree.xpath("//title/text()")[0] print("网页标题:", title) # 查找某个标签并获取其文本内容 h1 = tree.xpath("//h1/text()")[0] print("h1标签内容:", h1) # 查找所有的链接并输出链接文本和URL links = tree.xpath("//a") for link in links: link_text = link.xpath("text()")[0] link_url = link.xpath("@href")[0] print("链接文本:", link_text) print("链接URL:", link_url) ``` 以上就是使用bs4和XPath进行数据提取的示例代码。希望能帮助到你!如有需要,请随时追问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

insight^tkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值