XPath数据解析

本文介绍了XPath数据解析相关内容。包括解析原理,需实例化etree对象并加载页面源码,调用xpath方法结合表达式定位标签和捕获内容,还提及环境安装。阐述了实例化etree对象的方式,以及xpath表达式的属性定位、索引定位、取文本和取属性等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XPath数据解析

  • xpath解析原理:
  • ①:实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中
  • ②:调用对象中的xpath方法,结合xpath表达式实现标签的定位和内容的捕获
  • ③:环境安装pip install lxml
  • 如何实例化一个etree对象:from lxml import etree
  • ①:将本地的html文档当中的源码数据加载到etree对象中:etree.parse(filePath)
  • ②:可以将从互联网上获取的源码数据加载到该对象中:etree.HTML('page_text')
  • ③:xpath('xpath表达式')
  • xpath表达式
import requests
from lxml import etree
if __name__ == '__main__':
    #UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
    }
    #实例化好了一个etree对象,且将被解析的源码加载到了该对象中
    tree = etree.parse('soguo.html')
    #xpath可以通过层级关系进行标签的定位
    #第一个'/'表示的是从根结点开始定位,一个‘/’表示一个层级。
    #//:表示可以从任意位置开始定位
    #r = tree.xpath('//div[@class="pos-more"]')
    #属性定位://div[@class="pos-more]"  tag[@attrName="attrValue"]
    #r = tree.xpth('//div[@class="pos-more"]/p[3]')#索引定位:获取div中的第三个p标签
    #取文本:
    r = tree.xpth('//div[@class="pos-more"]//li[5]/a/text()')[0]
    #获取div下面两个层级第五个li标签中的p标签
    #/text:标签中所有直系的文本内容
    #//text:标签下的所有文本内容
    print(r)

  • 属性定位://div[@class="pos-more]" tag[@attrName="attrValue"]
  • 索引定位://div[@class="pos-more"]/p[3] 索引数组从1开始
  • 取文本:
  • ①:/text()---->获取的是标签中直系的文本内容
  • ②://text()----->标签中非直系的文本内容(所有的文本内容)
  • 取属性:/@attrName ===>img/src
Python 网页爬虫利用 XPath 进行京东手机详情数据的爬取,是因为 XPath 是一种用于在 XML 或 HTML 文档中选择元素的语言,非常适合处理结构化的网页内容。下面是简单的步骤: 1. **安装库**:首先,你需要安装 Python 的爬虫库,如 `requests`(用于发送 HTTP 请求)和 `BeautifulSoup` 或 `lxml`(用于解析 HTML 结构)。 ```bash pip install requests beautifulsoup4 # 或者使用 lxml 提高性能 pip install lxml ``` 2. **发送请求**:使用 `requests.get` 发送 GET 请求到京东商品详情页面的 URL。 ```python import requests url = 'https://item.jd.com/<商品ID>.html' response = requests.get(url) ``` 3. **解析HTML**:使用 BeautifulSoup 解析返回的 HTML 内容,找到包含所需数据的部分。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'lxml') xpath_query = '//*[@id="main"]/div[@class="sku-item"]' # 使用适合的XPath表达式 data_elements = soup.select(xpath_query) # 找到所有匹配的数据节点 ``` 4. **提取数据**:遍历找到的数据元素,使用 `.text`、`.get('attr')` 等方法获取具体的属性值。例如,获取手机名称、价格等信息。 ```python for element in data_elements: title = element.find('span', {'class': 'p-name'}).text price = element.find('i', {'class': 'p-price'}).get('title') print(f"标题: {title}, 价格: {price}") ``` 5. **保存数据**:如果你想将数据持久化,可以将其写入文件、数据库或 JSON 文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值