Scrapy Spider只提取第一个表格元素

时间:2019-05-03 08:33:45

标签: python-3.x xpath scrapy

我正在尝试抓取以下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 个答案:

答案 0 :(得分:1)

替换

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()
    }