我正在尝试抓取以下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()
}
答案 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()
}