Python使用XPath解析HTML:从入门到精通

这篇具有很好参考价值的文章主要介绍了Python使用XPath解析HTML:从入门到精通。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

XPath是一种用于选择XML文档中节点的语言,它可以通过路径表达式来定位节点。由于HTML文档的结构与XML文档类似,XPath也可以用于解析HTML文档。Python是一种非常流行的编程语言,它提供了许多库用于解析HTML文档。本文将介绍Python中使用XPath解析HTML文档的方法和技巧。

XPath语法

XPath表达式组成

XPath的路径表达式类似于文件系统中的路径,它用于描述节点在文档树中的位置。XPath表达式由以下几个部分组成:

  • 标签名:标签名用于描述节点的类型,它可以是HTML标签名或XML标签名。例如,img表示图片节点,a表示链接节点。

  • 轴:轴用于描述节点与当前节点的关系,它可以是父节点、子节点、兄弟节点等。

  • 谓词:谓词用于描述节点的属性或位置。

XPath方法

在lxml库中,可以使用XPath方法来解析HTML文档。XPath方法有以下几种:

  • etree.HTML():将HTML字符串转化为一个Element对象。
  • find():返回第一个匹配的元素。
  • findall():返回所有匹配的元素。
  • xpath():返回所有匹配XPath表达式的元素。

=

Python中使用XPath解析HTML文档

Python中有许多库用于解析HTML文档,其中比较流行的有BeautifulSoup和lxml。这两个库都支持使用XPath解析HTML文档。在本文中,我们将使用lxml库来解析HTML文档。

安装lxml库

在使用lxml库之前,需要先安装它。可以使用pip命令来安装lxml库,命令如下:

pip install lxml

解析HTML文档

在使用lxml库解析HTML文档之前,需要先将HTML文档加载到内存中。可以使用requests库来加载HTML文档,代码如下:

import requests

url = 'https://www.example.com'
response = requests.get(url)
html = response.content

接下来,我们将使用lxml库来解析HTML文档。代码如下:

from lxml import etree

将HTML文档转换为Element对象

element = etree.HTML(html)

使用XPath表达式来选择节点

nodes = element.xpath('//a[@class="link"]')

遍历节点并输出节点的文本

for node in nodes:
    print(node.text)

在上面的代码中,我们使用etree.HTML()方法将HTML文档转换为Element对象。然后使用XPath表达式来选择所有class属性为link的a标签节点。最后遍历所有节点并输出节点的文本。

XPath表达式示例

下面我们将介绍一些常用的XPath表达式及其对应的示例。

选择节点

选择所有节点:

//*

选择指定节点:

//a

选择指定节点和属性:

//a[@href]

选择指定节点和属性值:

//a[@href='https://www.example.com']

选择指定节点和多个属性值:

//a[@href='https://www.example.com' and @class='link']

选择指定节点和文本:

//a[text()='Link']

选择父节点:

../

选择指定父节点:

../div

3.3.3 选择子节点

选择子节点:

/*

选择指定子节点:

/div

选择兄弟节点:

/following-sibling::*

选择指定兄弟节点:

/following-sibling::div

选择前一个兄弟节点:

/preceding-sibling::div[1]

谓词

选择属性等于指定值的节点:

//*[@class='link']

选择属性不等于指定值的节点:

//*[@class!='link']

选择属性包含指定值的节点:

//*[contains(@class, 'link')]

选择属性以指定值开头的节点:

//*[starts-with(@href, 'https://')]

选择属性以指定值结尾的节点:

//*[ends-with(@href, '.html')]

选择指定位置的节点:

//*[position()=3]

选择指定范围内的节点:

//*[position()>2 and position()<6]

运算符

选择属性值为数字的节点:

//*[starts-with(@id, 'item') and @id > 10]

选择属性值为数字的节点并按照属性值排序:

//*[starts-with(@id, 'item') and number(@id) > 10]/@id | //*[starts-with(@id, 'item') and number(@id) > 10]/@class

示例代码如下:

from lxml import etree

# 构造html
html_string = '''
<html>
  <head>
    <title>Contains Test</title>
  </head>
  <body>
    <div id="content">
      <h1>Welcome to my website</h1>
      <p>This is a test page to demonstrate the use of contains in XPath.</p>
      <ul>
        <li><a href="#">Link 1</a></li>
        <li><a href="#">Link 2</a></li>
        <li><a href="#">Link 3</a></li>
      </ul>
    </div>
  </body>
</html>
'''

# 解析html
doc = etree.HTML(html_string)

# 使用contains函数查找包含“test”的段落元素
p_elements = doc.xpath('//p[contains(text(), "test")]')

# 打印结果
for p in p_elements:
    print(p.text)

输出结果为:

This is a test page to demonstrate the use of contains in XPath.

除了使用contains函数,我们还可以使用其他的xpath语法来解析html。以下是一些示例代码:

  1. 查找所有链接元素
# 使用xpath表达式选择所有名称为“a”的元素
link_elements = doc.xpath('//a')

# 打印结果
for link in link_elements:
    print(link.text, link.get('href'))

输出:

Link 1 #
Link 2 #
Link 3 #

  1. 查找所有列表项元素
# 使用xpath表达式选择所有名称为“li”下的a节点的元素
li_elements = doc.xpath('//li')

# 打印结果
for li in li_elements:
    print(etree.tostring(li))      #'输出节点'
    print(li.xpath('./a/text()')) #'输出a节点文本'

输出:
python xpath文档,python,html

  1. 查找所有带有id属性的元素
# 使用xpath表达式选择所有带有id属性的元素
id_elements = doc.xpath('//*[@id]')

# 打印结果
for element in id_elements:
    print(element.tag, element.get('id'))

输出:

div content

  1. 查找特定id的元素
# 使用xpath表达式选择id为“content”的元素
content_element = doc.xpath('//*[@id="content"]')[0]

# 打印结果
print(content_element.tag, content_element.text)

输出:

div


总结

本文介绍了Python中使用XPath解析HTML文档的方法和技巧。XPath是一种强大的语言,它可以通过路径表达式来定位节点,同时还支持多种谓词和运算符。在Python中,lxml库是一种常用的解析HTML文档的库,它支持使用XPath表达式来选择节点。通过本文的介绍,相信读者已经掌握了使用XPath解析HTML文档的基本方法和技巧,可以应用于实际开发中。文章来源地址https://www.toymoban.com/news/detail-771252.html

到了这里,关于Python使用XPath解析HTML:从入门到精通的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python从入门到进阶】28、xpath的安装以及使用

    接上篇《27、Handler处理器使用及代理和Cookie登录实现》 上一篇我们讲解了urllib中Handler处理器的基本使用,以及实现代理访问和Cookie的登录。本篇我们来讲解HTML文档解析中的核心插件xpath的安装及使用。 XPath是由W3C(World Wide Web Consortium)组织发布的。W3C是一个国际性组织,负

    2024年02月05日
    浏览(47)
  • python爬虫数据解析xpath

    下载地址:百度网盘 请输入提取码 第一步: 下载好文件后会得到一个没有扩展名的文件,重命名该文件将其改为.rar或者.zip等压缩文件,解压之后会得到一个.crx文件和一个.pem文件。新建一个文件夹,将这两个文件放在该文件夹(本人将其命名为xpath-helper)内。 第二步: 将

    2024年02月10日
    浏览(40)
  • Python爬虫学习笔记(四)————XPath解析

    目录 0.xpath最新下载地址和安装教程 1.xpath安装 2.xpath基本使用 3.xpath基本语法 4.实例 (1)xpath解析本地文件  (2)xpath解析服务器响应的数据 ①获取百度网站的“百度一下”四个字 ②获取站长素材网站情侣图片前十页的图片 0.xpath最新下载地址和安装教程 https://blog.csdn.net/

    2024年02月16日
    浏览(51)
  • python爬虫数据解析xpath、jsonpath,bs4

    解析数据的方式大概有三种 xpath JsonPath BeautifulSoup 打开谷歌浏览器扩展程序,打开开发者模式,拖入插件,重启浏览器,ctrl+shift+x,打开插件页面 安装在python环境中的Scripts下边,这里就是python库的位置,例如我的地址为:E:pythonpython3.10.11Scripts 解析本地文件etree.parse( \\\'xx.

    2024年02月13日
    浏览(46)
  • python spider 爬虫 之 解析 xpath 、jsonpath、BeautifulSoup (三)

    简称:bs4 BeautifulSoup跟lxml 一样,是一个html文档的解析器,主要功能也是解析和提取数据 优缺点 缺点:效率没有lxml的效率高 优点:接口接口人性化,使用方便 延用了css选择器 安装BeautifulSoup 1、安装:pip install bs4 2、导入:from bs4 import BeautifulSoup 3、创建bs4 对象 ① 服务器响

    2024年02月11日
    浏览(61)
  • Python网页爬虫爬取豆瓣Top250电影数据——Xpath数据解析

    1.1 查看原页面信息 首先打开豆瓣Top250电影页面,其网址是:https://movie.douban.com/top250。 可以发现,该页面展示的电影信息有中英文电影名、导演、主演、上映年份、国籍、电影类型、评分等。 下滑到页面底部,发现第一页有25部电影的数据,并且可以点击页码数实现页面跳转

    2024年02月05日
    浏览(54)
  • python selenium的xpath的使用

    2024年02月12日
    浏览(42)
  • XPath从入门到精通:基础和高级用法完整指南,附美团APP匹配示例

    XPath 通常用来进行网站、XML (APP )和数据挖掘,通过元素和属性的方式来获取指定的节点,然后抓取需要的信息。 学习 XPath 语法之前,首先了解一下一些概念。 以上面的 HTML 节点树为例,节点之间包含了下列的关系: 父节点 (Parent): HTML 是 DIV 和 P 节点的父节点; 子节点

    2024年02月19日
    浏览(40)
  • python+selenium使用xpath定位的问题

    python用selenium调chrome爬取网页信息遇到报错: 1.InvalidSelectorException: Message: invalid selector: The result of the xpath expression is [object Attr]. It should be an element 原因是selenium不支持从xpath中直接获取text文本信息。 xpath表达式修改为: 2.Message: no such element: Unable to locate element: xpath表达式一直

    2024年02月12日
    浏览(43)
  • XPath:学习使用XPath语法提取HTML/XML文档中的数据使用语法

    以下是一些XPath语法示例,用于提取HTML/XML文档中的数据: 选择元素: 选择所有p元素: //p 选择根元素: / 属性匹配: 选择class属性为\\\"example\\\"的div元素: //div[@class=\\\'example\\\'] 文本内容提取: 提取所有a元素的文本内容: //a/text() 提取第一个p元素的文本内容: //p[1]/text() 使用逻辑

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包