python 如何允许scrapy跟随重定向?

yrdbyhpb  于 2023-05-05  发布在  Python
关注(0)|答案(2)|浏览(168)

我正试图从网页的历史版本中抓取数据作为备份Wayback Machine。
我有成千上万的页面需要刮,我不想去找出确切的日期和时间的可用备份为他们每个人的麻烦。我只想得到每周的历史数据或最近的可用数据。
我知道的是,如果我把一个日期在这里的链接:
https://web.archive.org/web/<some_date>/<some_url>
那么Wayback Machine将自动重定向到最近的可用捕获。这将在我的场景中工作得很好。
我有一个scrapy蜘蛛,它可以提取数据,我已经成功地在当前版本的网页上使用过,所以我知道它可以工作,并且它会产生正确的输出。但是当我尝试在备份的页面版本上运行scrapy时,我得到以下输出,通知页面正在重定向并且没有返回数据:

2023-05-04 20:18:33 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
 'scrapy.spidermiddlewares.referer.RefererMiddleware',
 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
 'scrapy.spidermiddlewares.depth.DepthMiddleware']
2023-05-04 20:18:33 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2023-05-04 20:18:33 [scrapy.core.engine] INFO: Spider opened
2023-05-04 20:18:33 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2023-05-04 20:18:33 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2023-05-04 20:18:36 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://web.archive.org/web/20200204105913/<some_url>> from <GET https://web.archive.org/web/20050313/<some_url>>

我已经看过类似性质的其他问题,我知道我需要对中间件做一些事情,但其他问题更多的是关于不允许重定向,而我想要的恰恰相反。
如何允许scrapy跟踪重定向?

0x6upsns

0x6upsns1#

从@beer提供的文档链接中,您需要启用RedirectMiddleware
然而,从文档中可以看出:
例如,如果你希望重定向中间件忽略301和302响应(并将它们传递给你的蜘蛛),你可以这样做:

class MySpider(CrawlSpider):
    handle_httpstatus_list = [301, 302]

该参数用于针对给定的HTTP状态,绕过RedirectMiddleware。尝试在不设置handle_httpstatus_list的情况下使用中间件。

mznpcxlj

mznpcxlj2#

尝试RedirectMiddleware
https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#module-scrapy.downloadermiddlewares.redirect

handle_httpstatus_list = [301, 302]

相关问题