将获得的值分配给变量并在scrapy中重用它

时间:2017-01-27 18:55:38

标签: python scrapy

这是我正在使用的蜘蛛代码。 我遇到的问题是我想通过'Building'中的xpath提取数据,并将其重用于将使用第二个for循环拉取的所有数据。我对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]+')





        }

1 个答案:

答案 0 :(得分: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来自该课程。要仅将那些相对的孩子带到外div,您应该使用.//div。见https://doc.scrapy.org/en/latest/topics/selectors.html#working-with-relative-xpaths

相关问题