我使用以下网站进行测试:
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有何不同,
答案 0 :(得分:2)
我认为您正在寻找此选择器:
response.xpath('//div[@style]/input')
它是这样工作的:
div
)中选择所有//div
个元素; style
属性([@style]
)的那些; input
节点,它们是在步骤2(/input
)上选择的元素的后代。您的第二个选择器(//div//@style/input
)不能正常运行,因为它可以:
div
)中选择所有//div
个元素; style
)中选择的div的每个后代中选择//@style
属性; input
属性的直接后代的style
节点,这是不存在的(/input
)。