2017-01-27 5 views
1

Hier wird der Spider-Code verwendet. Das Problem, das ich habe, ist, dass ich die Daten wie durch den xpath in "Gebäude" extrahieren und es für alle Daten wiederverwenden möchte, die mit der zweiten for-Schleife gezogen werden. Ich bin neu auf dem Schrottplatz, also bitte helfen Sie mir. Ich weiß, dass es für viele von euch eine idiotische Frage ist, aber es ist für mich trivial.zugewiesenen Wert einer Variablen zuweisen und in scrapy wiederverwenden

import scrapy 
import re 


class ShinjukDataByBuilding(scrapy.Spider): 
name = "displaybybuilding2" 
start_urls = ['http://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13104&sngz=&po1=12&pc=50'] 

def parse(self, response): 
    for div in response.xpath('div[@class="cassetteitem"]'): 
     yield{ 
      'Building' = div.xpath('//div[@class="cassetteitem_content-title"]/text()').extract() 
      for tbody in response.xpath('//table[@class="cassetteitem_other"]//tbody'): 
       'BuildingName' = Building, 
       'Property Link':response.xpath('//tr//td[@class="ui-text--midium ui-text--bold"]/a/@href').extract_first(' ').strip(), 
       'Property Code':response.xpath('//tr//td[@class="ui-text--midium ui-text--bold"]/a/@href').re('[a-z]+\=[0-9]+') 





     } 

Antwort

0

Ich denke, ein Element zu ergeben ist eine Iteration Ihrer inneren Schleife. Sie würden also die Ausbeute für jede Iteration Ihrer inneren Schleife nennen.

import scrapy 
import re 

class ShinjukDataByBuilding(scrapy.Spider): 
    name = "displaybybuilding2" 
    start_urls = ['http://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13104&sngz=&po1=12&pc=50'] 

    def parse(self, response): 
     for div in response.xpath('div[@class="cassetteitem"]'): 
      building = div.xpath('//div[@class="cassetteitem_content-title"]/text()').extract() 
      for tbody in response.xpath('//table[@class="cassetteitem_other"]//tbody'): 
       yield { 
        'BuildingName': building, 
        'Property Link':response.xpath('//tr//td[@class="ui-text--midium ui-text--bold"]/a/@href').extract_first(' ').strip(), 
        'Property Code':response.xpath('//tr//td[@class="ui-text--midium ui-text--bold"]/a/@href').re('[a-z]+\=[0-9]+') 
       } 

Beachten Sie auch, dass 'Building' = div.xpath('//div[@class="cassetteitem_content-title"]/text()').extract() falsche Syntax ist, müssten Sie ein : statt =

Ihr Code scheint ein paar Probleme zu haben. Wenn Sie div.xpath('//div[@class="cassetteitem_content-title"]/text()').extract() anrufen, gehen Sie durch allediv s, die diese Klasse haben. Um nur diejenigen zu erhalten, die relative Kinder zum äußeren div sind, sollten Sie stattdessen .//div verwenden. Siehe https://doc.scrapy.org/en/latest/topics/selectors.html#working-with-relative-xpaths

Verwandte Themen