scrapy-7 | Response内置CSS选择器

xpath类似,CSSResponse中也集成了。CSS选择器的语法更加简单,但是功能不如xpath强大。

CSS即层叠样式表。

语法

表达式描述例子
*选中所有元素css('*')
Element选中Element元素css('img')
E1, E2选中E1和E2元素css('div,p')
E1 E2选中E1后代元素中的E2元素css('div input')
E1 > E2选中E1子元素后的E2元素css('div > span')
E1 + E2选中E1兄弟元素中的E2元素css('div + b')
.Class选中class属性包含Class的元素css('.info')
#id选中id属性为id的元素css('name')
[Attr]选中包含Attr属性的元素css('[id]')
[Attr = value]选中包含Attr属性且值value的元素css("[class = 'name']")
[Attr ~= value]选中包含Attr属性且值包含value的元素css("[class ~= 'name']")
E:nth-child(n)选中E元素,且该元素必须是其父元素第n个子元素css("li:nth-child(2)")
E:nth-last-child(n)选中E元素,且该元素必须是其父元素倒数第n个子元素css("li:nth-last-child(2)")
E:first-child选中E元素,且该元素必须是其父元素第1个子元素css("li:first-child")
E:last-child选中E元素,且该元素必须是其父元素倒数第1个子元素css("li:last-child")
E:empty选中没有子元素的E元素css("div:empty")
E::text选中E元素的文本节点css("p::text")

不难发现,其实和CSS的选择器有着一拼

案例

由于比较简单,和xpath类似,这里就举一个小案例:

from scrapy.selector import Selector
from scrapy.http import HtmlResponse

body = """
<ul>
    <li class="name first"><b>Name</b></li>
    <li class="sex">M</li>
    <li class="age">23</li>
</ul>
"""
response = HtmlResponse(url='baiyazi.top', body=body, encoding='utf8')
a = response.css("li:nth-child(2)").extract()  
#['<li class="sex">M</li>']

a = response.css("li[class ~= first]").extract()  
#['<li class="name first"><b>Name</b></li>']

a = response.css("li::text").extract()  
#['M', '23']  因为第一个节点包含子节点

   Reprint policy


《scrapy-7 | Response内置CSS选择器》 by 梦否 is licensed under a Creative Commons Attribution 4.0 International License
 Previous
seo-7 |  用Item数据封装 seo-7 | 用Item数据封装
学习了xpath和css,我们就可以很容易的从下载的网页中提取出我们想要的数据内容了。数据较多的时候,自然而然就想到了使用字典、列表来封装数据。 Scrapy中提供了Item类,来封装爬取到的数据。当然,可以直接使用字典、列表等,虽然能完成
2019-06-09
Next 
scrapy-6 |  Response内置XPath选择器 scrapy-6 | Response内置XPath选择器
和Selector类似,为了方便用户编码操作,XPath在Response中也集成了。Xpath(XML Path Language)XML路径语言,是一种用来确定xml文档中某元素位置的语言。提示: HTML属于xml在第四讲案例中我们已
2019-06-07
  TOC