[英]Retrieve items text inside dropdown list xpath
我有一个这样的选择
<select name="super_attribute[93]" data-selector="super_attribute[93]" data-validate="{required:true}" id="attribute93" class="super-attribute-select" aria-required="true">
<option value="">Choose an Option...</option>
<option value="131">Green</option>
<option value="20364">Black</option>
<option value="20365">White</option></select>
我想使用 CSS 选择器或 Xpath 从下拉列表(绿色、黑色、白色)中获取项目文本
我尝试了以下
response.xpath("//*[(@id = 'attribute93')]").extract()
出于某种原因,它只返回了第一个值
[u'<select name="super_attribute[93]" data-selector="super_attribute[93]" data-validate="{required:true}" id="attribute93" class="super-attribute-select"><option value="">Choose an Option...</option></select>']
路径:
//select[@id="attribute93"]/option[position()>1]/text()
要选择所有<options>
,您的 CSS 查询将是:
select#attribute93 option
您不是在选择option
元素,其中有几个,而是select
元素。 您只在输入文档中显示一个select
元素。
>>> from scrapy.selector import Selector
>>> body = """<select name="super_attribute[93]" data-selector="super_attribute[93]" data-validate="{required:true}" id="attribute93" class="super-attribute-select" aria-required="true">
... <option value="">Choose an Option...</option>
... <option value="131">Green</option>
... <option value="20364">Black</option>
... <option value="20365">White</option></select>"""
>>> response = Selector(text=body)
>>> response.xpath("//*[(@id = 'attribute93')]").extract()
['<select name="super_attribute[93]" data-selector="super_attribute[93]" data-validate="{required:true}" id="attribute93" class="super-attribute-select" aria-required="true">\n<option value="">Choose an Option...</option>\n<option value="131">Green</option>\n<option value="20364">Black</option>\n<option value="20365">White</option></select>']
输出是一个包含一个元素的列表,但它不是您在问题中发布的内容(至少在 scrapy 1.8.0
):包括所有子option
元素。
使用此现有答案中的正确 XPath 表达式:
>>> response.xpath('//select[@id="attribute93"]/option[position()>1]/text()').extract()
['Green', 'Black', 'White']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.