微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MY Scrapy webscraper OS仅返回最后一个引号

如何解决MY Scrapy webscraper OS仅返回最后一个引号

我编写了这个易用的网络抓取工具,以抓取this website上前10个页面上的所有引号,在运行代码后,我发现只有其中某些页面的最后一个引号才返回给我。 我需要一些建议,使我能使这只爬行的蜘蛛返回所有页面上的所有报价。这是我的代码

import scrapy
from google_quotes.items import GoogleQuotesItem

start_urls=['https://www.goodreads.com/quotes']
for number in range(1,11):
    page_append='?page={}'.format(str(number))
    start_urls.append('https://www.goodreads.com/quotes{}'.format(page_append))

class quotes(scrapy.Spider):
    name='goodreads_quotes'
    def start_requests(self):
        urls=start_urls
        for url in urls:
            yield scrapy.Request(url=url,callback=self.parse)
        
    def parse(self,response):
        g_quotes=GoogleQuotesItem()
        quotes=response.css('div .quoteText::text').extract()
        for quote in quotes:
            if len(quote)>10:
                g_quotes['quote']=quote
        return g_quotes

蜘蛛会按照我的意愿在所有页面中移动,但只会返回最后一个引号。

解决方法

正如@flaxon所说,您需要产生结果。您还需要注意缩进。

您还正在检查quote变量(是字符串,不是列表)是否大于10,不确定原因。

def parse(self,response):
    g_quotes = GoogleQuotesItem()
    quotes = response.css('div .quoteText::text').extract()
    for quote in quotes:
        g_quotes['quote'] = quote
        yield g_quotes # Notice the indentation

尝试一下,让我知道。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。