2017-02-10 5 views
0

Я пытаюсь скрести данные gelbeseiten.de (желтые страницы в германии)Scrapy возвращает только первый результат

# -*- coding: utf-8 -*- 
import scrapy 
    from scrapy.spiders import CrawlSpider 
    from scrapy.http import Request 
    from scrapy.selector import Selector 
    from scrapy.http import HtmlResponse 


class GelbeseitenSpider(scrapy.Spider): 
    name = "gelbeseiten" 
    allowed_domains = ["http://www.gelbeseiten.de"] 
    start_urls = ['http://www.gelbeseiten.de/zoohandlungen/s1/alphabetisch'] 

    def parse(self, response): 
    for adress in response.css('article'): 
     #Strasse 
     strasse = adress.xpath('//span[@itemprop="streetAddress"]//text()').extract_first() 

     #Name 
     name = adress.xpath('//span[@itemprop="name"]//text()').extract_first() 

     #PLZ 
     plz = adress.xpath('//span[@itemprop="postalCode"]//text()').extract_first() 

     #Stadt 
     stadt = adress.xpath('//span[@itemprop="addressLocality"]//text()').extract_first() 

     yield { 
     'name': name, 
     'strasse': strasse, 
     'plz': plz, 
     'stadt': stadt, 
     } 

В результате я получаю 15 комплектов с всегда тот же адрес, но я думаю, это должно быть 15 разных адресов.

Я ценю любую помощь.

ответ

0

Вы используете абсолютные XPATH выражения:

adress.xpath('//span[@itemprop="streetAddress"]//text()')

в то время как следует использовать по отношению к address (примечание ведущей точки в выражении):

adress.xpath('.//span[@itemprop="streetAddress"]//text()')