使用scrapy爬虫,不可避免的需要对网页结构进行分析并提取,其中用到的一个重要的工具就是XPath。XPath可以帮助我们很方便的对html元素进行定位选择。
在Chrome中使用XPath
在chrome中使用XPath,只需要在开发者工具中点击控制台(Console)标签,然安徽使用$x功能就可以了。
比如获取所有的section标签,我们使用$x('//section'),控制台中就可以看到一个包含所有元素的Javascript数组。将光标移动到这个数组上,还可以看到被选择的元素被高亮显示。
至于这个表达式('//section')的规则是如何的,下面来粗略的介绍一下。
XPath表达式
/ 单斜杠
HTML文档的层级结构的最高级是<html>标签。可以使用元素名和斜杠线选择任意元素。
以这个html文档为例:
获取body标签使用/html/body
获取body下的section标签使用/html/body/section,因为有5个section元素,所以这个结果是有5个元素的JavaScript数组。
可以使用[index]来获取这个数组的元素。
例如要获取第一个section标签,使用/html/body/section[1]
注意:这个地方index是从1开始计算的,而不是0,这跟一般的数组获取元素有点不同。
// 双斜杠
// 可以访问所有的同名元素
例如,要找到html中所有的section元素,使用//section即可
@ 访问属性
比如获取head中的charset属性
也可以只通过text()函数选择文字。
在Chrome浏览器中获得XPath表达式
提前应对网页发生改变
. 避免使用数组序号
. 用class抓取效果不一定好
. 数据指向的class优于排版指向的class
. id通常是最可靠的