xpath介绍及使用(python)

網易云課堂學習筆記

http://study.163.com/course/courseLearn.htm?courseId=1004933008#/learn/video?lessonId=1050679945&courseId=1004933008

等我想起來的時候再把圖片轉文字記下來.

xpath是一個可以快速查找結點的語言.


xpath支持html,且比正則表達式簡單和强大.
scrapy也支持xpath語法.




选取多个路径可以用竖线“|”将路径隔开。注意xpath里没有小括号的语法,所以不能用小括号来简写路径,下面是个错误的示范:/book/(a|b),这样来选取a或b是不对的,/book/a | b也没法选到b(此处b在book文件夹里)。正确写法:/book/a | /book/b。


C:\Users\oakpa\Desktop\test.html的内容。
<body>
body here
	<div class="c">class="c"</div>
	<div id="i">id="i"</div>
	<div>div</div>
</body>
#使用lxml的示例。
from lxml import etree

html=etree.parse(r'C:\Users\oakpa\Desktop\test.html')#etree.parse()里面写的是文件名,它可以生成etree对象。
print(type(html))#打印了一个etree的对象类型。

result=html.xpath('//div')#获取所有div标签。/代表根路径,//代表所有根路径下的后代。
print(result)#输出etree对象的列表。
print(len(result))#输出结果的长度。
print(type(result))#结果的类型。
print(type(result[0]))#结果的第一个元素的类型。

'''
输出:
<class 'lxml.etree._ElementTree'>
[<Element div at 0x18777f5df48>, <Element div at 0x18777f5df08>, <Element div at 0x18777f5dbc8>]
3
<class 'list'>
<class 'lxml.etree._Element'>
'''

result=html.xpath('//div/@class')#获取div标签的所有class属性,@表示获取属性。
print(result)
'''
輸出:
['c']
'''

result=html.xpath('//div[@id="i"]')#所有id等於i的div標簽.
print(result)
print(result[0].text)
'''
輸出:
[<Element div at 0x255e9b19408>]
id="i"
'''

result=html.xpath('//body//div')#找body下的所有div標簽.如果用//body/div找到是body的兒子中的div.

result=html.xpath('//body')
print(result[0].text)#注意.text衹能取出一級標簽下的所有内容.
'''
輸出:
body here
'''

result=html.xpath('//body//@class')#body自身及所有後代中的class.
print(result)
result=html.xpath('//body/@class')#body的class.
print(result)
'''
輸出:
['c']
[]
'''

result=html.xpath('//body//div[last()-2]/@class')#獲取倒數第三個div的class.
print(result)
'''
輸出:
['c']
'''

result=html.xpath('//*[@class="c"]')#*代表所有標簽.獲取class為c的所有標簽.
#再輸出標簽名.
for i in result:
    print(i.tag)
'''
輸出:
div
'''



猜你喜欢

转载自blog.csdn.net/github_35736728/article/details/79675970