Python 数据爬虫xpath的使用(例题)

本文详细介绍了XPath的基本语法,包括如何使用双斜杠和单斜杠定位节点,text()函数抓取文本内容,属性选择器@,以及通配符和点、双点操作符的应用。通过实例演示了如何在HTML中定位div、ul和a标签,并展示了XPath特殊方法如starts-with在属性值匹配中的用法。
摘要由CSDN通过智能技术生成

xpath基础语法使用

样例代码如下:

from lxml import etree
html="""
<!DOCTYPE html>
<html>
<head lang="en">
<title>测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="content">
<ul id="ul">
<li>NO.1</li>
<li>NO.2</li>
<li>NO.3</li>
</ul>
<ul id="ul2">
<li>one</li>
<li>two</li>
</ul>
</div>
<div id="url">
<a href="http:www.58.com" title="58">58</a>
<a href="http:www.csdn.net" title="CSDN">CSDN</a>
</div>
</body>
</html>
"""


1) // 双斜杠: 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。
2) / 单斜杠:  寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作
3) /text() : 获取当前路径下的文本内容
4) /@xxxx:  提取当前路径下标签的属性值
5) | 可选符 : 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。
6) . 点 : 用来选取当前节点
7) .. 双点 : 选取当前节点的父节点

8)另外还有starts-with(@属性名称,属性字符相同部分),string(.)两种重要的特殊方法后面将重点讲

例题如下:

1、
#etree.HTML()可以用来解析字符串格式的HTML文档对象#
 selector=etree.HTML(html)
 content=selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()')
 #这里使用id属性来定位哪个div和ul被匹配 使用text()获取文本内容
2、
for i in content:  
   print(i)
con=selector.xpath('//a/@href') 
#这里使用//从全文中定位符合条件的a标签,使用“@标签属性”获取a便签的href属性值
3、
for each in con:
     print(each)
con=selector.xpath('/html/body/div/a/@title') #使用绝对路径 
href="http:www.csdn.2Fa/@title') #使用相对路径定位 两者效果是一样的
print(len(con))
print(con[0],con[1])

XPath特殊方法


1、XPath中需要取的标签如果没有属性,可以使用text(),posision()来识别标签。

from lxml import etree
html="""
    <div>hello
        <p>H</p>
    </div>
    <div>hehe</div>
"""
sel=etree.HTML(html)
con=sel.xpath('//div[text()="hello"]/p/text()')
print(con[0])

2、这里使用text()的方法来判别是哪个div标签

from lxml import etree
html="""
    <div>hello
        <p>H</p>
        <p>J</p>
        <p>I</p>
</div>
<div>hehe</div>
"""
sel=etree.HTML(html)
con=sel.xpath('//div[text()="hello"]/p[posision()=2]/text()')
print(con[0])
#J

3、 starts-with 解决标签属性值以相同字符串开头的情况

from lxml import etree
html="""
    <body>
        <div id="aa">aa</div>
        <div id="ab">ab</div>
        <div id="ac">ac</div>
    </body>
    """
selector=etree.HTML(html)
content=selector.xpath('//div[starts-with(@id,"a")]/text()')
         #这里使用starts-with方法提取div的id标签

#属性值开头为a的div标签
for each in content:
    print(each)
#输出结果为:
# aa
# ab
# ac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值