Паук Scrapy извлекает только первый элемент таблицы - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь очистить этот URL: 'search.siemens.com/en/?q=iot'.Для начала меня просто интересует название и категория, которая показана на скриншоте ниже.Однако, когда я запускаю своего паука, я получаю только первый элемент:

{'titel': 'MindSphere – open ', 
'category': ' operating system - Software - Siemens Global Website'}

Вот мой паук:

import scrapy

class SiemensHtmlSpider(scrapy.Spider):
    name = 'siemens_html'
    allowed_domains = ['search.siemens.com/en/?q=iot']
    start_urls = ['http://search.siemens.com/en/?q=iot/']

    def parse(self, response):
        #//dl[@id='search-resultlist']/dt/a
        for element in response.xpath("//dl[@id='search-resultlist']"):
            yield {
                'titel': element.xpath('//dt/a/text()[1]').extract_first(),
                'category': element.xpath('//dt/a/text()[2]').extract_first()
            }

И вот мой скриншот: enter image description here

1 Ответ

1 голос
/ 03 мая 2019

Заменить

yield {
    'titel': element.xpath('//dt/a/text()[1]').extract_first(),
    'category': element.xpath('//dt/a/text()[2]').extract_first()
}

на:

yield {
    'titel': element.xpath('.//dt/a/text()[1]').extract_first(),
    'category': element.xpath('.//dt/a/text()[2]').extract_first()
}

Обратите внимание на точки перед селектором xpath, они означают относительный путь.

UPD: просто маленький наконечниктакже проверьте ваше значение allowed_domains.Это должно быть написано так: allowed_domains = ['search.siemens.com']

UPD2: также проблема в главном селекторе в цикле for, лучше быть более точным и указывать на список бетонных блоков.

for element in response.xpath("//dl[@id='search-resultlist']/dt"):
    yield {
        'titel': element.xpath('.//a/text()[1]').get(),
        'category': element.xpath('.//a/text()[2]').get()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...