运行此代码时,仅刮擦项目组

时间:2020-07-09 15:09:44

标签: scrapy

我是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,但这只是给我每个项目的块。

任何帮助将不胜感激。

2 个答案:

答案 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()
              }