xpath解析HTML文件

引言:

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

xpath表达式组成:

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

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

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

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

xpath基本语法:

1 :路径查询

//:查询所有子孙节点,不考虑层级关系。

/:找直接子节点

2 :谓词查询

//div[@id]

//div[@id="maincontent"]

3 : 属性查询

//@class

4 : 模糊查询

//div[contains(@id,"he")]

//div[starts-with(@id,"he")]

5 :内容查询

//div/h1/text()

6 : 逻辑运算

//div[@id="head" and @class="s_down"]

//title | //price

我们在使用xpath的时候需要下载lxml库,

pip install lxml -i https://pypi.douban.com/simple

xpath解析本地HTML示例

from lxml import etree

# xpath解析
#(1)解析本地文件 etree.parse 必须要有结束标签
#(2)解析服务器响应的数据,response.read().decode('utf-8')  etree.HTML()
# 本地文件
tree = etree.parse('070_尚硅谷_爬虫_解析_xpath的基本使用.html')
# tree.xpath('xpath路径')
# 查找ul下面的li
#li_list = tree.xpath('//body/ul/li')

#查找有id属性的标签
#li_list = tree.xpath('//ul/li[@id]/text()')

#找到l1的li标签
#li_list= tree.xpath('//ul/li[@id="l1"]/text()')

#查找到id为l1的class标签
#li_list= tree.xpath('//ul/li[@id="l1"]/@class')


#查询id中包含l的li标签
#li_list = tree.xpath('//ul/li[contains(@id,"l")]/text()')

#查询id以l开头的li标签
#li_list = tree.xpath('//ul/li[starts-with(@id,"c")]/text()')

#查询id为l1和class为c1的
#li_list = tree.xpath('//ul/li[@id = "l1" and @class = "c1"]/text()')

li_list = tree.xpath('//ul/li[@id = "l1"]/text() | //ul/li[@id="l2"]/text()')
print(li_list)

xpath解析网站

import urllib.request
url = 'https://www.baidu.com/'
headers = {
    "User-Agent":   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.82'
}
#请求对象定制
request = urllib.request.Request(url=url,headers=headers)
#模拟浏览器访问
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
#解析源码获取内容
from lxml import etree
tree = etree.HTML(content)
#获取想要的数据
result = tree.xpath('//input[@id="su"]/@value')
print(result)

在解析的时候我们可以利用xpath插件来获取想要的内容xpath表达式。(插件的安装在我上一个博客里面可以去自行下载安装)

猜你喜欢

转载自blog.csdn.net/qq_52351946/article/details/131886406