Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分
Xpath是专门在XML文件中选择节点的语言,也可以用在HTML上。
CSS是一门将HTML文档样式化语言,选择器由它定义,并与特定的HTML元素的样式相关联。
XPath选择器
参考:http://www.cnblogs.com/MUMO/p/5732836.html
常用的路径表达式,这里列举了一些常用的,XPath的功能非常强大,内含超过100个的内建函数。
下面为常用的方法:
表达式 | 说明 |
---|---|
nodeName | 选取此节点的所有节点 |
/nodeName | 选取根元素nodeName |
nodeName/a | 选取所有属于nodeName的子元素的a元素 |
//div | 选取所有div元素(不论出现在文档的任何地方) |
nodeName//div | 选取所有属于nodeName元素的后代的div元素,不管它出现在nodeName之下的任何位置 |
//@class | 选取所有有名为class的属性的节点 |
/nodeName/div[1] | 选取属于nodeName子元素的第一个div元素 |
/nodeName/div[last()] | 选取属于nodeName子元素的最后一个div元素 |
/nodeName/div[last()-1] | 选取属于nodeName子元素的倒数第二个div元素 |
//div[@lang] | 选取所有拥有lang属性的div元素 |
//div[@lang=’eng’] | 选取所有lang属性为eng的divf元素 |
/div/* | 选取属于div元素的所有子节点 |
//* | 选取所有元素 |
//div[@*] | 选取所有带属性的divf元素 |
//div/a | //div/p | 选取所有div元素的a和p元素 |
//span | //ul | 选取文档中的span和ul元素 |
nodeName/div/p | //span | 选取所有属于nodeName元素的div元素的p元素,以及文档中所有有span元素 |
//div/text() | 提取出div下面的内容 |
xpath(‘//div/text()’).extract() | 提取出数据内容列表 |
CSS选择器
参考:https://blog.csdn.net/ahri_j/article/details/72196823
CSS层叠样式表,语法由两个主要部分组成:选择器,一条或多条声明
Selector {declaration1;declaration2;……}
下面为常用的使用方法
表达式 | 说明 |
---|---|
container | 选取id为container的节点 |
.container | 选取所有class包含container的节点 |
li a | 选取所有li下的所有a节点 |
ul + p | 选取ul后面的第一个p元素 |
div#container > ul | 选取id为container的div的第一个ul子元素 |
ul ~ p | 选取与ul相邻的所有p元素 |
a[title] | 选取所有有title属性的a元素 |
a[href=’http://jobbole.com“] | 选取所有href属性为jobbole.com值的a元素 |
a[href*=’jobbole’] | 选取所有href属性包含jobbole的a元素 |
a[href^=”http”] | 选取所有href属性值以http开头的a元素 |
a[href$=”.jpg”] | 选取所有href属性值以.jpg结尾的a元素 |
input[type=radio]:checked | 选择选中的input元素 |
div:not(#container) | 选取所有id非container的div元素 |
li:nth-child(3) | 选择第三个li元素 |
tr:nth-child(2n) | 选择第偶数个tr元素 |