使用xpath
Xpath,全称是XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言。它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。因此xpath常在爬虫中被用到。
XPath规则
例如:
html | 选取html的所有子节点 |
---|
/html | 选取根元素html(绝对路径) |
//div | 选取所有div节点 |
//div/a | 选取所有div节点下的a节点 |
./p | 选取当前节点下的p节点 |
…/p | 选取父节点下的p节点 |
.//div | 选取当前节点下的所有div节点 |
./a/@href | 选取当前节点下的a节点的href属性 |
XPath常用语法
1. 通过属性选取节点:
//*[@id=“test”] | 选取所有id为test的节点 |
---|
//div[@class=“test”] | 选取所有class为test的div节点 |
//div[@name=“city” and @id=“t”] | 选取所有name为city并且id为t的div节点 |
//div[@name=“city” or @id=“t”] | 选取所有name为city或者id为t的div节点 |
2.【contains】属性包含多个值的选取:
: 如<div class="t1 t2 t3"><p>123</p></div>
//div[contains(@class,“t1”)] | 选取所有class包含t1的div节点 |
---|
//div[contains(@class,“t1”) and contains(@class,“t2”)] | 选取所有class包含t1和t2的div节点 |
3.用【start-with】,定位节点:
//a[starts-with(@rel, “nofo”)] | 选取所有rel属性以nofo开头的a元素 |
---|
4.用【last】,定位节点:
//div[@id=“t1”]/a[last()] | 选取id为t1的div节点下的最后一个a节点 |
---|
5.用【text】,定位节点:
//p[text()=“cont”] | 选取所有text文本内容为cont的p节点 |
---|
//div[contains(text(), “cont2”)] | 选取所有text文本内容包含cont2的div节点 |
6.选取节点下的文本内容【text】:
: 如<div class="t1 t2 t3"><p>123</p><p>456</p>789</div>
//div/text() | 选取所有div下的文本(一级文本)—— 789 |
---|
//div/p[1]/text() | 选取所有div下的第一个p节点下的文本(一级文本)—— 123 |
//div//text() | 选取所有div下的所有文本([123,456,789]) |
7.选取多个路径:
//div/p| //tr/em | 选取所有div下的p节点和所有tr下的em节点 |
---|
//div| //tr/em | 选取所有div节点和所有tr下的em节点 |
8.选取第几个节点(xpath中从1开始):
: 如<div class="t1 t2 t3"><p>123</p><p>456</p></div>
//div/p[1] | 选取所有div下的第一个p节点 |
---|
//div/p[2] | 选取所有div下的第二个p节点 |
9.定位兄弟节点:
//a[@id=“3”]/following-sibling::a[1] | 获取第三个a标签的下一个a标签 |
---|
//a[@id=“3”]/following-sibling:: *[N] | 获取第三个a标签后面的第N个标签 |
//a[@id=“3”]/preceding-sibling::a[1] | 获取第三个a标签的上一个a标签 |
//a[@id=“3”]/preceding-sibling:: *[N] | 获取第三个a标签的前面的第N个标签 |
//a[@id=“3”]/. . | 获取第三个a标签的父标签 |
新手司机上线ing…
如有写的不对的地方,还望指出来!