lxml库的安装
xpath常用规则说明
表达式 |
规则描述 |
nodename |
选取此节点打所以子节点,xpath(‘body’) |
/ |
从当前节点选取直接子节点 |
// |
从当前节点选取子孙节点 |
. |
选取当前节点 |
.. |
选取当前节点的父节点 |
@ |
选取属性 |
* |
通配符,选取所有元素节点与元素名 |
@* |
选取所有属性 |
[@attrib] |
选取具有给定属性的所有元素 |
@attrib=’’value’ |
选取给定属性具有给定值得所有元素 |
text() |
选取文本,/text()选取标签中直系的文本内容,//text()选取标签中所有文本内容 |
查找某个特定的节点或者包含某个特定值的节点,用“[]”括起来。
实例
表达式 |
规则描述 |
/div/p[n] |
选取div子元素的第n个p元素 |
/div/p[last()] |
选取div子元素的最后一个p元素 |
/div/p[last()-1] |
选取div子元素的倒数第二个p元素 |
/div/p[book<n] |
选取div子元素的前n-1个book元素 |
//div/[@id] |
选取所有拥有名称为id属性的div节点 |
//div[@id=’app’ |
选取所有div节点,且拥有id属性的值为app的属性 |
- 举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| from lxml import etree,html
ret = """ <div> <ul> <li class="item-0"><a href="link1.html">第一个</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-0"><a href="link5.html">a属性</a> </ul> </div>
"""
ret1 = requests.get("http://www.linke.fun")
html = etree.HTML(ret) html1 = html.fromstring(ret1.content)
html2=etree.parse('test.html',etree.HTMLParser())
print(html.xpath('//*'))
print(html.xpath('//div/ul'))
print(html.xpath('//ul/..')) print(html.xpath('//ul/parent::*'))
print(html.xpath('//ul[@id="002"]/*'))
print(html.xpath('//li[@class="aaa"]/a')) print(html.xpath('//li[contains(@class,"aaa")]/a'))
print(html.xpath('//li[@class="aaa" and @name="item"]/a'))
print(html.xpath('//li[@class="aaa"]/a/@href)'))
print(html.xpath('//li[@class="aaa"]/a/text()'))
print(html.xpath('//li[contains(@class,"aaa")]/a/text()')) print(html.xpath('//li[1][contains(@class,"aaa")]/a/text()')) print(html.xpath('//li[last()][contains(@class,"aaa")]/a/text()')) print(html.xpath('//li[position()>2 and position()<4][contains(@class,"aaa")]/a/text()')) print(html.xpath('//li[last()-2][contains(@class,"aaa")]/a/text()'
print(html.xpath('//ul/ancestor::*')) print(html.xpath('//ul/ancestor::div')) print(html.xpath('//li/attribute::class')) print(html.xpath('//ul/child::li')) print(html.xpath('//ul/descendant::a')) print(html.xpath('//ul[@id=001]/following::*')) print(html.xpath('//ul/following-sibling::*'))
|