Scrapy Selector属性

时间:2018-09-24 14:39:09

标签: python-3.x xpath scrapy

我使用以下网站进行测试:

scrapy shell http://example.webscraping.com/places/default/user/login#

做一些测试:

输入1:

response.xpath('//div//[@style]/input')

输出1:

[<Selector xpath='//div[@style]/input' data='<input name="_next" type="hidden" value='>,  

<Selector xpath='//div[@style]/input' data='<input name="_formkey" type="hidden" val'>,  

<Selector xpath='//div[@style]/input' data='<input name="_formname" type="hidden" va'>]

输入2:

response.xpath('//div//@style/input')

输出2:

[]

输入3:

response.xpath('//div//@style/input') == response.xpath('//div[style]/input')

输出3:

True

我想知道1和2有何不同,

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找此选择器:

response.xpath('//div[@style]/input')

它是这样工作的:

  1. 从文档(div)中选择所有//div个元素;
  2. 对于其中的每一个,仅选择具有style属性([@style])的那些;
  3. 选择input节点,它们是在步骤2(/input)上选择的元素的后代。

您的第二个选择器(//div//@style/input)不能正常运行,因为它可以:

  1. 从页面(div)中选择所有//div个元素;
  2. 从在步骤1(style)中选择的div的每个后代中选择//@style属性;
  3. 选择属于input属性的直接后代style节点,这是不存在的(/input)。