Python使用xpath对解析内容进行数据提取

 更新时间:2024年05月31日 08:23:16   作者:江禾藜  
XPath 使用路径表达式来选取HTML/ XML 文档中的节点或节点集,节点是通过沿着路径 (path) 或者步 (steps) 来选取的,本文将给大家介绍Python使用xpath对解析内容进行数据提取的方法,需要的朋友可以参考下

一、前言

在前面的文章当中,已经教大家如何去获取我们需要的数据原文内容,今天就介绍一个用于提取所需数据的方法之一xpath。在后续会讲解bs4(beautifulsoup),re正则表达式。

二、正文

XPath 使用路径表达式来选取HTML/ XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

使用到python中的一个lxml库:下载 pip install lxml

选取节点

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取(取子节点)。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

路径表达式

路径表达式结果
bookstore选取 bookstore 元素的所有子节点。
/bookstore选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性。

谓语

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。

选取未知节点

通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。

--- 在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果
/bookstore/*选取 bookstore 元素的所有子元素。
//*选取文档中的所有元素。
//title[@*]选取所有带有属性的 title 元素。

选取若干节点

通过在路径表达式中使用"|"运算符,您可以选取若干个路径。

路径表达式结果
//book/title//book/price选取 book 元素的所有 title 和 price 元素。
//title//price选取文档中的所有 title 和 price 元素。
/bookstore/book/title//price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

三、示例

下面给出一个示例代码

 # -*- coding:utf-8 -*-
 import requests
 from lxml import etree
 ​
 ​
 class DouGuo(object):
     def __init__(self):
         self.url = "https://www.douguo.com/caipu/%E5%AE%B6%E5%B8%B8%E8%8F%9C/0/20"
         self.headers = {
             "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
         }
 ​
     def get_data_index(self):
         response = requests.get(self.url, headers=self.headers)
         response.encoding="utf-8"
         if response.status_code == 200:
             return response.text
         else:
             return None
 ​
     def parse_data_index(self, response):
         html = etree.HTML(response)
         data_list = html.xpath('//ul[@class="cook-list"]//li[@class="clearfix"]')
         for data in data_list:
             # 提取文本值
             title = data.xpath("./div/a/text()")[0]
             major = data.xpath("./div/p/text()")[0]
             # 提取属性值
             head = data.xpath("./div/div[2]/a/img/@alt")[0]
             score = data.xpath("./div/div[1]//span/text()")[0]
             print(f"title: {title}\nmajor: {major}\nhead:{head}\nscore:{score}\n\n")
 ​
     def run(self):
         response = self.get_data_index()
         # print(response)
         self.parse_data_index(response)
 ​
 if __name__ == '__main__':
     spider = DouGuo()
     spider.run()

四、结语

大家可以尝试去抓取这个url https://cs.lianjia.com/ershoufang/

获取第一页数据即可,同时也可以思考一下,如何进行多页的获取,实现翻页功能。

到此这篇关于Python使用xpath对解析内容进行数据提取的文章就介绍到这了,更多相关Python xpath数据提取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python练习-承压计算

    Python练习-承压计算

    这篇文章主要介绍了Python练习-承压计算,前面我们练习了Python购物单,这篇我们继续练习承压计算,和前篇文章一样还是问题描述开始,需要的小伙伴可以参考一下
    2022-01-01
  • Pycharm中的Python Console用法解读

    Pycharm中的Python Console用法解读

    这篇文章主要介绍了Pycharm中的Python Console用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • python3监控CentOS磁盘空间脚本

    python3监控CentOS磁盘空间脚本

    这篇文章主要为大家详细介绍了Python3监控CentOS磁盘空间脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Python yield使用方法示例

    Python yield使用方法示例

    这篇文章主要介绍了Python yield使用方法,大家参考使用吧
    2013-12-12
  • Python实战之生成有关联单选问卷

    Python实战之生成有关联单选问卷

    这篇文章主要为大家分享了一个Python实战小案例——生成有关联单选问卷,并且能根据问卷总分数生成对应判断文案结果,感兴趣的可以了解一下
    2023-04-04
  • python 统计列表中不同元素的数量方法

    python 统计列表中不同元素的数量方法

    今天小编就为大家分享一篇python 统计列表中不同元素的数量方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 深入浅析python继承问题

    深入浅析python继承问题

    这篇文章主要介绍了深入浅析python继承问题的相关资料,非常不错,感兴趣的朋友一起看看吧
    2016-05-05
  • python 利用pyttsx3文字转语音过程详解

    python 利用pyttsx3文字转语音过程详解

    这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程

    在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程

    这篇文章主要介绍了在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • pytorch之关于PyTorch结构介绍

    pytorch之关于PyTorch结构介绍

    这篇文章主要介绍了pytorch之关于PyTorch结构的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论