欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

xpath 第一个元素_XPath

发布时间:2025/10/17 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 xpath 第一个元素_XPath 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言,但它同样适用于HTML的文档搜索。

在爬虫中我们使用xpath提取特定位置的文本内容

相关链接:

XPath用法:http://www.w3school.com.cn/xpath/index.asp

目录

1、XPath语法 2、准备工作

3、功能示范 4、属性获取

5、属性匹配 6、例子示范


1、XPath语法

用法及结果:

2、准备工作

xpath在python中是lxml库中的一个功能,所以首先要确保安装好lxml库,若没有安装可以参考前面的文章——爬虫开发环境部署(一)

3、例子示范

我们要从这段html中提取出XPath

from lxml import html html_text = ''' <html> <head></head> <body> <div class="name"> <span class="title">XPath</span> </div> <div class="name"> <span class="text">爬虫</span> </div> </body> </html> ''' etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div/span[1]/text()') print(result)

方法二,把div的class属性加上(这种方式在实际应用中经常用到)

etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/span[1]/text()') print(result)

运行结果:

['XPath', '爬虫']

调用HTML类进行初始化,这样就成功构造了一个XPath解析对象,也可以自动修正HTML文本,变成符合规则的文本。如果我们要提取文本的话需要在xpath规则后加/text()。

我们发现结果是列表['XPath', '爬虫'],里面有两个字符串,但是我们只想要XPath那我们要怎么做呢?发现XPath的span标签的class属性是title,而爬虫的class属性是text,我们只需要在把span标签的属性在明确一下就可以了

etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/span[@class="title"]/text()') print(result)

运行结果:

['爬虫']

4、属性获取

属性获取可以获取html标签里的属性值,多用在获取网页链接上

例如我要获取百度一下的网站地址:

from lxml import htmlhtml_text = ''' <html> <head></head> <body> <div class="name"> <a href="https://www.baidu.com">百度一下</span> </div> </body> </html> ''' etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/a/@href') print(result)

运行结果:

['https://www.baidu.com']

5、属性匹配

属性匹配包含属性多值匹配和多属性匹配

  • 5.1、属性多值匹配

例如我们要获取span标签的XPath:

from lxml import htmlhtml_text = ''' <div class="name"> <span class="title text">XPath</span> </div> ''' etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/span[@class="title"]/text()') print(result)

运行结果:

[]

居然是空列表为什么呢?

我们可以看到span标签的class属性中有两个属性值,这时就要用到contains()函数了,代码如下:

etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/span[contains(@class, "title")]/text()') print(result)

运行结果:

['XPath']

  • 5.2、多属性匹配

有些标签有多个属性,这时需要同时匹配多个属性,这时要用到运算符and来连接,

例:

from

运行结果:

['XPath']

6、例子示范

接下来实战一波

目标网站:https://gz.fang.lianjia.com/loupan

我们要获取这些小区的名字

在网页中点右键选择检查,我们会看到界面的右侧出现了一堆看不懂的英文(其实这些就是网页的源码),点击我标记红框内的按钮,这个按钮是查找网页元素的,点完后移到小区名上点击一下就可以看到相关的源码

我们可以很快的在源码中找到我们所需要的金茂湾这几个字,它是在一个a标签中,在往上看发现这是一个在div标签内的第一个a标签的文本,这个div标签的属性是class="resblock-name",那xpath的规则就是:'//div[@class="resblock-name"]/a/text()'

同样的原理我们查找越秀东坡,可以发现xpath规则和金茂湾的是一样的,我们就可以推断出这个网站的小区名应该都是这样的,当然要获取数据还需要配合requests库,先请求获取网页的源码

代码如下:

from lxml import html import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36' }url = 'https://gz.fang.lianjia.com/loupan' reponse = requests.get(url, headers=headers) name_regex = '//div[@class="resblock-name"]/a/text()' etree = html.etree a = etree.HTML(reponse.text) result = a.xpath(name_regex) print(result)

运行结果:

['金茂湾', '越秀东坡', '景业东湖洲豪园', '振业天颂花园', '珠光山水诚品', '天健汇', '保利花海湾', '保利半岛', '时代幸汇', '绿地柏玥晶舍']

请求的时候一定要加入headers,不然会比封掉

headers也很好拿到

序号2随便选都可以,然后把序号4的内容加入headers就好了

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的xpath 第一个元素_XPath的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。