2017-01-27 55 views
1

這裏是我正在使用的蜘蛛代碼。 我遇到的問題是,我想通過'Building'中的xpath提取數據,並將其用於所有將使用第二個for循環的數據。我對scrapy很新,所以請幫忙。我知道這對許多人來說可能是一個愚蠢的問題,但對我來說這很微不足道。將獲得的值賦值給一個變量並在scrapy中重用它

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]+') 





     } 

回答

0

我認爲一個元素的產生是內循環的一個迭代。所以你會在內部循環的每一次迭代中調用yield。

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]+') 
       } 

還要注意的是'Building' = div.xpath('//div[@class="cassetteitem_content-title"]/text()').extract()是錯誤的語法,你需要的不是:=

你的代碼似乎有一些更多的問題。當您致電div.xpath('//div[@class="cassetteitem_content-title"]/text()').extract()時,您將通過全部div s有該類。爲了只讓那些親戚孩子到外面div你應該使用.//div來代替。見https://doc.scrapy.org/en/latest/topics/selectors.html#working-with-relative-xpaths