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

使用Scrapy(已配置User Agent)仍被网站拦截的问题求助

爬取业余体育网站时Scrapy请求被拦截,持续返回429状态码
  • 目标网站:avaldsnes.spoortz.no
  • 问题现象:已配置User Agent(包括Google Bot和普通浏览器UA),但所有请求均返回429 Unknown Status,无一次200成功响应;浏览器可正常访问该网站,确认IP未被封禁。

用户提供的代码

import scrapy
from scrapy.spiders import Rule, CrawlSpider
from scrapy.linkextractors import LinkExtractor

class QuoteSpider(CrawlSpider):
    name = "Quote"
    allowed_domains = ["avaldsnes.spoortz.no"]
    start_urls = ["https://avaldsnes.spoortz.no/portal/arego/club/7"]

    rules = (Rule(LinkExtractor(allow="")),)
    custom_settings = {"USER_AGENT": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"}

    def parse(self, response):
        print(response.request.headers)

解决建议

1. 降低请求频率,添加延迟

429状态码本质是请求过于频繁触发了反爬限制,先通过Scrapy配置降低请求密度:

custom_settings = {
    "USER_AGENT": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "DOWNLOAD_DELAY": 2,  # 每次请求间隔2秒,可根据实际情况调整
    "CONCURRENT_REQUESTS_PER_DOMAIN": 1  # 每个域名同时仅发送1个请求
}

2. 补充完整浏览器请求头

浏览器访问时会携带更多字段,仅设置User Agent不够,手动添加常用请求头:

def start_requests(self):
    headers = {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.5",
        "Referer": "https://avaldsnes.spoortz.no/",
        "Upgrade-Insecure-Requests": "1"
    }
    for url in self.start_urls:
        yield scrapy.Request(url, headers=headers, callback=self.parse)

3. 先禁用自动链接提取,测试单页请求

当前Rule配置会提取页面所有链接,短时间内触发大量请求。先注释掉规则,仅测试起始URL的请求,确认能拿到200响应后再逐步扩展:

# rules = (Rule(LinkExtractor(allow="")),)

4. 模拟浏览器会话Cookie

浏览器访问时会生成会话Cookie,尝试复制浏览器中该网站的Cookie添加到请求头:

headers = {
    # 其他请求头字段...
    "Cookie": "复制浏览器开发者工具中该网站的Cookie内容"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:47:21