我是Scrapy的新手,我很难让它返回比第一行更多的内容。这是代码:
import scrapy
class FarmtoolsSpider(scrapy.Spider):
name = 'farmtools'
allowed_domains = ['www.donedeal.ie']
start_urls = ['https://www.donedeal.ie/farmtools/']
def parse(self, response):
for row in response.xpath('//ul[@class="card-collection"]'):
yield {
'item_title': response.xpath('.//div[1]/p[@class="card__body-
title"]/text()').get(),
'item_county': response.xpath('.//ul[@class="card__body-
keyinfo"]/li[2]/text()').get(),
'item_price':
response.xpath('.//p[@class="card__price"]/span[1]/text()').get(),
'item_id': response.xpath('.//li[@class="card-
item"]/a/@href').get()
}
我希望每个项目的标题,县,价格,ID在不同的行中。实际上,如果我按原样运行此代码,它只会给我第一行。 我已经尝试过getall,但这只是给我每个项目的块。
任何帮助将不胜感激。
答案 0 :(得分:0)
尝试行 .xpath('.//),而不是response.xpath
例如
for row in response.xpath('//ul[@class="card-collection"]'):
yield {'item_title': row.xpath('.//div[1]/p[@class="card__body-
title"]/text()').get(), etc...}
答案 1 :(得分:0)
这是返回30行的工作代码:
class FarmtoolsSpider(scrapy.Spider):
name = 'farmtools'
allowed_domains = ['www.donedeal.ie']
start_urls = ['https://www.donedeal.ie/farmtools/']
def parse(self, response):
rows = response.xpath('//ul[@class="card-collection"]/li')
for row in rows:
yield {
'item_title': row.xpath('.//div[1]/p[@class="card__body-title"]/text()').get(),
'item_county': row.xpath('.//ul[@class="card__body-keyinfo"]/li[2]/text()').get(),
'item_price': row.xpath('.//p[@class="card__price"]/span[1]/text()').get(),
'item_id': row.xpath('.//li[@class="card-item"]/a/@href').get()
}