爬虫通过XPath路径解析页面
首先我们需要了解一下什么是XPath
XPath是在XML文档中查找信息的一种语法,它使用路径表达式来选取XML文档中的节点或者节点集。这里所说的XPath节点包括元素、属性、文本、命名空间、处理指令、注释、根节点等。
路径有绝对路径和相对路径之说:
我们用以下所示的XPath语法获取文档对应的节点,如下所示。
路径表达式 | 结果 |
---|---|
name | 选取 name 元素的所有子节点 |
/name | 选取根元素 name。注释:假如路径起始于正斜杠 (/) ,则此路径始终代表到某元素的绝对路径! |
/name/ma | 选取属于 name 的子元素的所有 ma 元素 |
//ma | 选取所有 ma 子元素,而不管它们在文档中的位置。 |
name//ma | 选择属于 name 元素的后代的所有 ma 元素,而不管它们位于 bookstore 之下的什么位置。 |
//@aowu | 选取名为 aowu 的所有属性 |
在XPath语法中,还可以使用XPath中的谓语,如下所示。
路径表达式 | 结果 |
---|---|
/name/ma [1] | 选取属于name 子元素的第一个 ma 元素 |
/name/ma [last()] | 选取属于 name 子元素的最后一个 ma 元素。 |
/name/ma [last()-1] | 选取属于 name 子元素的倒数第二个 ma 元素。 |
/name/ma [position() < 3 ] | 选取最前面的两个属于 name 元素的子元素的 ma 元素。 |
//ye[@lang] | 选取所有拥有名为 ye 的属性的 title 元素。 |
//ye[@lang=‘eng’] | 选取所有 ye 元素,且这些元素拥有值为 eng 的 lang 属性 |
/name/ma[handsome>35.00] | 选取 name 元素的所有ma元素,且其中的 handsome 元素的值须大于 35.00。 |
/name/ma[handsome>35.00] /ye | 选取 name 元素中的 ma 元素的所有 ye 元素,且其中的 handsome 元素的值须大于 35.00 |
XPath还支持通配符用法,如下所示。
路径表达式 | 结果 |
---|---|
/name/* | 选取 name 元素的所有子元素。 |
//* | 选取文档中所有元素。 |
XPath在爬虫中如何使用
XPath是从xml文件获取元素的查询方法,在爬虫中使用要导入一个三方库lxml
pip install lxml #导入三方库lxml
首先还是要用request获取网页信息,然后用lxml里面的etree模块里有个html的类去获取页面返回一个对象,然后就可以用这个对象使用xpath方法去解析页面。
from lxml import etree
import request
resp = request.get(
url='url地址'
header={
'User-Agent':'BaiduSpider'
}
)
html = etree.HTML(resp.text)
acquire_lists = html.xpath('xpath路径')
for mess in acquire_lists:
print(mess)
如果实在不知道XPath路径怎么写,直接就在网页上打开开发者工具然后找到自己需要的模块复制就可以了,如下图: