python之Xpath语法

1. Xpath语法介绍

Xpath(XML Path Language)是一种在XML(可扩展标记语言)文档中查找信息的语言。它提供了一种用来选择XML文档中某些特定部分的方式。

1.1 Xpath的语法基础

Xpath语法的基础是XPath表达式,它由一系列的路径表达式组成,用于选择节点或节点集合。XPath表达式可以分为以下两种类型:

绝对路径表达式:以斜杠(/)开头的表达式

相对路径表达式:以双斜杠(//)开头的表达式,表示在整个文档中查找

在Xpath中,每个节点都可以表示为一个路径,例如:

//bookstore/book/title

上述路径表示选择整个XML文档中的bookstore节点,再依次选择book节点和title节点。

1.2 Xpath中的操作符

Xpath中常用的操作符如下:

//:选择当前节点下的所有节点

/:选择当前节点下的直接子节点

.:选择当前节点

..:选择当前节点的父节点

@:选择节点的属性

[]:选择符合条件的节点

|:选择两个节点集合的并集

1.3 Xpath中的函数

Xpath中常用的函数如下:

text():获取当前节点的文本内容

count():获取符合条件的节点数目

last():获取符合条件的最后一个节点

position():获取当前节点在节点集合中的位置

not():对选择结果取反

2. Xpath的应用

Xpath可应用于各种情境,如Web应用程序的自动化测试、爬虫程序的数据抓取。下面通过一个实例来演示Xpath如何实现数据抓取。

2.1 实例介绍

本文将要抓取一个房价数据网站上的租房信息,并将相关数据存储到本地文件中。

2.2 网站结构分析

我们选取链家租房网站(https://sh.lianjia.com/zufang/)进行演示。

进入网站后,我们可以看到一些筛选条件,例如租金范围、户型、区域等,这些条件可以用Xpath进行选择。此外,我们还需要获取每个房子的详情信息,包括房间布局、小区名称、楼层、面积、租金等,这些都对应网站中的节点。

通过Chrome浏览器的开发者工具,我们可以定位到需要抓取的数据对应的节点。

/html/body/div[3]/div/div[1]/ul/li[1]/div[1]/div[1]/a

上述Xpath表达式表示选取第一个房屋元素的URL链接。

2.3 代码实现

下面是对该网站的数据抓取的Python代码实现:

import requests

from lxml import etree

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

url = 'https://sh.lianjia.com/zufang/'

response = requests.get(url, headers=headers)

selector = etree.HTML(response.text)

urls = selector.xpath('//div[@class="content__list--item--main"]/p[1]/a/@href')

for url in urls:

detail_response = requests.get(url, headers=headers)

detail_selector = etree.HTML(detail_response.text)

title = detail_selector.xpath('//h1[@class="main"]/text()')

price = detail_selector.xpath('//span[@class="total"]/text()')

print(title, price)

2.4 代码解释

首先,我们使用requests库发起GET请求,获取网页源代码,并传递给etree模块,以便进行Xpath语法解析。随后,我们使用Xpath语法选取租房信息的URL链接,然后遍历每个链接,抓取房屋详情信息。最后,我们将房屋标题和价格输出到控制台。

上述代码的xpath('//div[@class="content__list--item--main"]/p[1]/a/@href')部分表示选取所有属于class为content__list--item--main的div节点下的第一个p节点的a标签的href属性。随后,我们使用requests库发起GET请求,获取房屋详情页,然后获取页面中的标题和价格信息。在Xpath中,text()函数用于获取节点的文本内容。

2.5 结果展示

运行上述代码,我们可以看到输出到控制台的房屋标题和价格信息:

['四平路91号 1室1厅 南   4000元/月'] ['4000']

['八佰伴整租1室0厅1卫 电梯公寓 6500元/月'] ['6500']

['永丰路1018号 3室1厅 南 北 9000元/月'] ['9000']

['海泉路916号 近地铁2号线 1室1厅 南 3200元/月'] ['3200']

['东方绿舟花苑二期 2室1厅 南 北 6600元/月'] ['6600']

['中原路14号 1室0厅 南北 1800元/月'] ['1800']

['新市一村9号楼 1室1厅 南 精装修 3000元/月'] ['3000']

...

3. 总结

Xpath是一种十分强大的文档查询语言,它提供了灵活、高效、简单的方式实现对XML和HTML文档的分析和查找,可应用于各种场景。在进行数据抓取时,我们可以使用Xpath语法来选取需要的数据,进而完成数据分析、统计、可视化等操作,提高数据处理质量和效率。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签