Вы выбираете не элементы 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']