Scrapy数据解析(CSS、XPath)
在Scrapy中原有的解析语法与原来的有点略微的区别
目录
- Scrapy数据解析(CSS、XPath)
- CSS解析器
- XPath解析器
CSS解析器
示例:
-
response.css('a')
返回的是selector对象 -
response.css('a').extract()
返回的是a标签对象 -
response.css('a::text').extract_first()
返回的是第一个a标签中文本的值 -
response.css('a::attr(href)').extract_first()
返回的是第一个a标签中href属性的值 -
response.css('a[href*=image]::attr(href)').extract()
返回所有a标签中href属性包含image的值 -
response.css('a[href*=image] img::attr(src)').extract()
返回所有a标签下image标签的src属性
基本语法:
语法 | 说明 |
---|---|
* | 选择所有节点 |
div h1::text | div下的h1标签的文本 |
#container | 选择id为container的节点 |
.container | 选择所有class包含container的节点 |
div,p | 选择所有 div 元素和 所有 p 元素 |
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://baidu.com”] | 选取所有href属性为http://baidu.com的a元素 |
a[href*=”baidu”] | 选取所有href属性值中包含baidu的a元素 |
a[href^=”http”] | 选取所有href属性值中以http开头的a元素 |
a[href$=”.jpg”] | 选取所有href属性值中以.jpg结尾的a元素 |
input[type=radio]:checked | 选择选中的radio的元素 |
div:not(#container) | 选取所有id为非container 的div属性 |
li:nth-child(3) | 选取第三个li元素 |
li:nth-child(2n) | 选取第偶数个li元素 |
a::attr(href) | 选取a标签的href属性 |
a::text | 选取a标签下的文本 |
XPath解析器
示例:
-
response.xpath('//a')
:返回所有a标签的节点对象 -
response.xpath('//a').extract()
:返回所有a标签的HTML内容 -
response.xpath('//a/text()').extract_first()
:返回第一个a标签中的文本内容。 -
response.xpath('//a/@href').extract_first()
:返回第一个a标签中的href属性值 -
response.xpath('//a[contains(@href,"image")]/@href').extract()
:返回所有href属性中包含"image"的a标签的href属性值 -
response.xpath('//a[contains(@href,"image")]/img/@src').extract()
:返回所有href属性中包含"image"的a标签下的img标签的src属性值
基本语法:
语法 | 说明 |
---|---|
artical | 选取所有artical元素的子节点 |
/artical | 选取根元素artical |
./artical | 选取当前元素下的artical |
…/artical | 选取父元素下的artical |
artical/a | 选取所有属于artical的子元素a元素 |
//div | 选取所有div 子元素,无论div在任何地方 |
artical//div | 选取所有属于artical的div 元素,无论div元素在artical的任何位置 |
//@class | 选取所有class属性 |
a/@href | 选取a标签的href属性 |
a/text() | 选取a标签下的文本 |
string(.) | 解析出当前节点下所有文字 |
string(…) | 解析出父节点下所有文字 |