xpath使用

之前已经对爬虫基本知识点用一篇博客总结过来,因为xpath实在太重要了,单独放一篇

"""
xpath使用   参考:https://www.w3school.com.cn/xpath/index.asp
"""
from lxml import etree

text = '''
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a>
     </ul>
 </div>

'''

html = etree.HTML(text)
result = etree.tostring(html)
print(result.decode('utf-8'))

"""
父节点
"""
print(html.xpath('//a[@href="link4.html"]/../@class'))  # ['item-1']
print(html.xpath('//a[@href="link4.html"]/parent::*/@class'))  # ['item-1']  父节点后的所有

"""
属性匹配
"""
print(html.xpath('//li[@class="item-0"]'))  # [<Element li at 0x7fc245c3eec0>, <Element li at 0x7fc245c3ee80>]

"""
文本获取
"""
print(html.xpath('//li[@class="item-0"]/text()'))  # ['
     ']
print(html.xpath('//li[@class="item-0"]/a/text()'))  # ['first item', 'fifth item']
print(html.xpath('//li[@class="item-0"]//text()'))  # ['first item', 'fifth item', '
     ']

"""
属性获取
"""
print(html.xpath('//li/a/@href'))  # ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

"""
属性多值匹配
"""
text2 = '''
    <li class="li li-first" name="item"><a href="link1.html">first item</a></li>
'''
html2 = etree.HTML(text2)
print(html2.xpath('//li[@class="li"]/a/text()'))  # []
# 使用contains()方法,第一个参数传入属性名称,第二个参数传入属性值
print(html2.xpath('//li[contains(@class, "li")]/a/text()'))  # ['first item']

"""
多属性匹配
or  或     age=19 or age=20
and 与        age>19 and age<25
mod  计算除法的余数   5 mod 2
|   计算两个节点集    //book | //cd
+    加法
-    减法
*    乘法
div  除法
=    等于       age=12
!=   不等于
<   小于
<=   
>
>=   
"""
print(html2.xpath('//li[contains(@class, "li") and @name="item"]/a/text()'))  # ['first item']

"""
按序选择
"""
print(html.xpath('//li[1]/a/text()'))  # ['first item']  选择第一个li节点(从1开始)
print(html.xpath('//li[last()]/a/text()'))  # ['fifth item']
print(html.xpath('//li[position()<3]/a/text()'))   # ['first item', 'second item']  # 位置小于3
print(html.xpath('//li[last()-2]/a/text()'))   # ['third item']  倒数第3个

"""
节点轴选择
"""

时间太紧,不像努力了?

浏览器Elements的搜索是支持Xpath的

可以使用浏览器复制出Xpath(公式很长,需要修改)

借助浏览器插件?
自行百度

原文地址:https://www.cnblogs.com/fly-book/p/15083442.html