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语法来选取需要的数据,进而完成数据分析、统计、可视化等操作,提高数据处理质量和效率。