【问题标题】:Why my scrapy script just scrape the first page and not the others?为什么我的scrapy脚本只抓取第一页而不是其他页面?
【发布时间】:2020-11-23 16:31:18
【问题描述】:

我正在尝试在网站上抓取一些信息:http://quotes.toscrape.com/

但是我找不到刮掉所有页面的方法,脚本只是刮掉第一页,我不明白我做错了什么。

到目前为止,这是我的脚本:

import scrapy

from ..items import QuotetutorialItem

class QuoteSpider(scrapy.Spider):
    name = 'quotes'
    page_number = 2
    start_urls = ['http://quotes.toscrape.com/page/1/']

    def parse(self, response):

        items = QuotetutorialItem()

        all_div_quotes = response.css('div.quote')

        for quotes in all_div_quotes:   

            title = quotes.css('span.text::text').extract()
            author = quotes.css('.author::text').extract()
            tags = quotes.css('.tag::text').extract()

            items['title'] = title
            items['author'] = author
            items['tags'] = tags

            yield items

        next_page = 'http://quotes.toscrape.com/page/'+ str(QuoteSpider.page_number) + '/'


        if QuoteSpider.page_number < 11:
            QuoteSpider.page_number += 1
            yield response.follow(next_page, callback = self.parse)

然后我在终端输入scrapy crawl quote,它只给我第一页上的信息。

有什么想法吗?

谢谢?

【问题讨论】:

    标签: python python-3.x web-scraping scrapy


    【解决方案1】:

    我认为你的代码没问题。它提取了10页的所有信息。请补充

    items['url'] = response.url
    

    在您的解析函数中。然后重新检查它的提取10页信息与否。

    【讨论】:

    • 在 for 循环代码块中,用于 all_div_quotes 中的引号:items['url'] = response.url
    • 非常感谢,我试试看:)
    • KeyError: 'QuotetutorialItem 不支持字段:url'
    • 在 QuotetutorialItem 类中定义一个新的字段 url。
    • items = QuotetutorialItem(url) NameError: name 'url' is not defined 也许你的意思是 'start_urls' ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2023-03-30
    • 2023-03-30
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多