Scrapy选择器(Selectors)写法总结

Scrapy的selector分两种:1.CSS写法 2.XPath写法。网上有很多相关的贴子,不过我以我的角度重新总结一下。希望能对看到本文的朋友有所帮助。

下面是Scrapy官方example中的一段示例的html代码

<html>
 <head>
  <base href='http://example.com/' />
  <title>Example website</title>
 </head>
 <body>
  <div id='images'>
   <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
   <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
   <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
   <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
   <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
  </div>
 </body>
</html>

1.CSS写法

1.1 获取属性值:
标签名::attr(属性名)
例:response.css('base::attr(href)')
1.2 获取元素内容
标签名::text
例:response.css('title::text')
1.3遇到有相同的标签时,需要在[ ]中加限定内容:
标签名[]::attr(属性名)
例:response.css('a[href*=image]::attr(href)')

2.XPath方法

2.1 获取属性值:
//标签名/@属性名
例:response.xpath('//base/@href')
2.2 获取元素内容:
//标签名/text()
例:response.xpath('//title/text()')
2.3 遇到有相同的标签时,需要在[ ]中加限定内容:

//标签名[contains(@属性名,"标签名")]/@属性名

例:response.xpath('//div[@id="images"]/a/text()')
注意:这里id对应的属性值必须用双引号,在scrapy的shell命令模式中,单引号一直报语法错误

另从网上找到一不错的总结:
XPath选择器
常用的路径表达式,这里列举了一些常用的下面为常用方法

nodeName         选取此节点的所有节点
 /               从根节点选取
 //              从匹配选择的当前节点选择文档中的节点,不考虑它们的位置
 .               选择当前节点
 ..              选取当前节点的父节点
 @               选取属性
 *               匹配任何元素节点
 @*              匹配任何属性节点
 Node()          匹配任何类型的节点

CSS选择器
CSS层叠样式表,语法由两个主要部分组成:选择器,一条或多条声明
Selector {declaration1;declaration2;……}

下面为常用的使用方法

.class                      .color                选择class=”color”的所有元素
#id                         #info                 选择id=”info”的所有元素
*                             *                   选择所有元素
element                       p                   选择所有的p元素
element,element             div,p                 选择所有div元素和所有p元素
element element             div p                 选择div标签内部的所有p元素
[attribute]                 [target]              选择带有targe属性的所有元素
[arrtibute=value]           [target=_blank]       选择target=”_blank”的所有元素
#id > element               #container > ul       选择id为container的第一个ul节点
element+element                ul + p             选择所有ul后面的第一个p元素

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部