这是我正在使用的蜘蛛代码。 我遇到的问题是我想通过'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]+')
}
答案 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