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

本文涉及的产品
云解析DNS,个人版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 在前面的文章当中,已经教大家如何去获取我们需要的数据原文内容,今天就介绍一个用于提取所需数据的方法之一xpath。在后续会讲解bs4(beautifulsoup),re正则表达式。

在前面的文章当中,已经教大家如何去获取我们需要的数据原文内容,今天就介绍一个用于提取所需数据的方法之一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()

image.gif

结语

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

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

相关文章
|
2天前
|
供应链 数据挖掘 数据处理
聚合数据,洞察未来!Python聚合术,解锁数据背后的商业密码!
【7月更文挑战第19天】数据聚合整合分散数据,揭示隐藏模式,助力企业决策。Python的Pandas与NumPy库简化了这一过程,提供高效的数据处理。例如,通过Pandas的groupby和agg函数,可以按产品ID和日期聚合销售数据,计算每日销量和收入。聚合后,企业可洞察产品销售趋势、季节性变化,优化策略,预测需求。Python丰富的资源和活跃社区支持各层次用户进行数据探索。
16 7
|
2天前
|
数据采集 机器学习/深度学习 数据挖掘
转换数据,扭转乾坤!Python转换技巧,让你的数据分析如虎添翼!
【7月更文挑战第19天】Python在数据转换中扮演关键角色,借助Pandas库进行数据清洗,如填充缺失值、处理异常值和转换数据类型。数据重塑通过pivot、melt和groupby提供多维度视图。文本数据通过独热编码或标签编码转化为数值。自定义函数解决复杂转换问题,提升数据分析的深度和准确性。掌握这些技巧,能有效挖掘数据价值,助力决策。
17 4
|
1天前
|
数据挖掘 索引 Python
数据聚合新风尚!Python带你领略数据聚合的无限魅力,秒变数据达人!
【7月更文挑战第20天】在数据驱动的世界,Python的Pandas库为数据聚合提供了强大工具。通过分组和统计计算,Pandas的DataFrame使得从海量数据中提取价值变得轻松。例如,聚合销售数据按地区和产品分类,只需简单几行代码即可计算总销量。Pandas不仅支持基本统计函数,还能自定义聚合操作,结合多级索引和其他高级功能,助你成为数据专家。开始使用Pandas,解锁数据的潜在洞察吧!
11 4
|
2天前
|
数据采集 数据挖掘 数据处理
数据清洗,不只是清洁!Python教你如何挖掘数据中的隐藏价值!
【7月更文挑战第19天】在数据驱动的世界,数据清洗是揭示企业资产价值的关键。Python的Pandas库助力分析师处理电商平台用户购买数据中的缺失值、格式错误和异常值。通过识别缺失值并填充,统一日期格式,以及用IQR法检测和处理异常值,数据变得有序且适合分析,从而能洞察用户行为模式和市场趋势,释放数据的潜力。数据清洗不仅是预处理,更是价值创造的过程。
16 3
|
1天前
|
数据采集 机器学习/深度学习 数据挖掘
数据也需SPA?Python转换大法,给你的数据做个全身放松SPA!
【7月更文挑战第20天】在Python中,数据SPA涉及理解需求、清洗(如用Pandas去除重复值、填充缺失值)、格式转换(如日期字符串转datetime)及聚合分析(如按年份分组求和)。Pandas库是数据清洗的强大工具,能有效提升数据质量,便于决策和机器学习。通过这些步骤,数据得以优化,准备就绪以应对各种分析挑战。
17 1
|
2天前
|
数据采集 数据挖掘 数据处理
数据转换与聚合,Python的双刃剑!精准切割,深度挖掘,数据世界任你遨游!
【7月更文挑战第19天】Python的Pandas库是数据科学家处理数据的得力工具,它在数据转换和聚合上的功能强大。例如,使用Pandas的`to_datetime`函数能统一日期格式,而`groupby`配合`agg`则可按类别聚合数据,进行统计分析。通过这些方法,可以有效地清洗数据、提取关键信息,助力数据驱动的决策。
|
1天前
|
中间件 数据库 开发者
解析Python Web框架的四大支柱:模板、ORM、中间件与路由
【7月更文挑战第20天】Python Web框架如Django、Flask、FastAPI的核心包括模板(如Django的DTL和Flask的Jinja2)、ORM(Django的内置ORM与Flask的SQLAlchemy)、中间件(Django的全局中间件与Flask的装饰器实现)和路由(Django的urls.py配置与Flask的@app.route()装饰器)。这些组件提升了代码组织和数据库操作的便捷性,确保了Web应用的稳定性和可扩展性。
|
3天前
|
JSON 分布式计算 大数据
MaxCompute产品使用合集之如何解析嵌套的JSON数据
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
26天前
|
XML 数据格式 Python
Python使用xpath对解析内容进行数据提取
今天就介绍一个用于提取所需数据的方法之一xpath。在后续会讲解bs4(beautifulsoup),re正则表达式。
|
8月前
|
索引 Python
【Python】数据解析—Xpath解析
【Python】数据解析—Xpath解析
45 0

推荐镜像

更多