You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Scrapy爬取网站及其子目录的所有Wayback Machine归档页面

解决Scrapy爬取Wayback Machine归档页面停止的问题

你的代码只爬取起始URL就停止,核心原因是普通的scrapy.Spider不支持rules属性,rules是CrawlSpider的专属配置,用于自动跟进符合规则的链接。按照以下修改可以实现遍历所有目标归档页面:

修改要点:

  • 爬虫类继承CrawlSpider而非scrapy.Spider
  • 重命名parse方法(不能用parse作为规则的callback,会覆盖CrawlSpider的核心解析逻辑)
  • 规则中添加follow=True,让爬虫持续跟进符合条件的链接
  • 简化正则表达式写法,用原始字符串避免转义混乱

修改后的完整代码:

import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.item import Item, Field
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.utils.project import get_project_settings

try:
    from urllib.parse import urlparse
except ImportError:
    from urlparse import urlparse
    
class VSItem(Item):
    value = Field()

class vsSpider(CrawlSpider):
    name = "lever"
    start_urls = [
        "https://web.archive.org/web/20051120125133/http://www.novi.k12.mi.us/default.aspx"
    ]
    rules = (
        Rule(
            LinkExtractor(allow=r'https://web.archive.org/web/\d{14}/http://www.novi.k12.mi.us/.*'),
            callback="parse_archive_page",
            follow=True
        ),
    )

    def parse_archive_page(self, response):
        it = VSItem()
        it["value"] = response.css("input[name='__VIEWSTATE']").extract()
        yield it
 
process = CrawlerProcess(get_project_settings())
process.crawl(vsSpider)
process.start()

额外说明:

  • 如果需要爬取该域名下所有时间戳的归档页面,还可以考虑先爬取Wayback Machine的站点归档列表页面(比如https://web.archive.org/web/*/http://www.novi.k12.mi.us/),从中提取所有可用的时间戳链接,再遍历爬取,这样能更全面地覆盖所有归档版本。
  • 注意遵守Wayback Machine的爬虫规则,避免请求频率过高导致被限制。

内容的提问来源于stack exchange,提问作者user4819461

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:00:11