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

Scrapy无法爬取folhadirigida.com.br页面的原因咨询

为什么我的Scrapy爬虫无法正确爬取folhadirigida.com.br首页?

先看看你贴出来的爬虫代码:

# -*- coding: utf-8 -*-
import scrapy

class ProvasSpider(scrapy.Spider):
    name = 'provas'
    allowed_domains = ['folhadirigida.com.br']
    start_urls = ['https://folhadirigida.com.br/']

    def parse(self, response):
        #criando pagina
        page = response.url.split ("/")[-3]
        filename = '%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)

我帮你分析下可能的问题:

1. 文件名生成逻辑的坑

你用response.url.split("/")[-3]来生成文件名,但首页的URL是https://folhadirigida.com.br/,用/分割后得到的列表是['https:', '', 'folhadirigida.com.br', ''],取索引-3对应的是空字符串,最终生成的文件名是.html——在Linux/macOS系统里这是隐藏文件,你可能根本没注意到它存在,误以为爬虫没输出结果。

而其他页面的URL结构不一样(比如https://folhadirigida.com.br/categoria/noticias/),分割后[-3]能拿到有效字符串,所以文件名正常,你能看到爬取的文件。

2. 首页可能有反爬拦截

有些网站会对首页做更严格的反爬校验,比如检查请求的User-Agent。Scrapy默认的User-Agent是类似Scrapy/2.8.0 (+https://scrapy.org)的标识,很容易被网站识别为爬虫并拦截,导致你拿到的内容不完整或者是空的。而其他内页的反爬规则可能更宽松,所以能正常爬取。

对应的解决方案

修复文件名生成逻辑

可以给首页单独指定文件名,或者用更鲁棒的方式提取页面标识:

def parse(self, response):
    # 处理首页的特殊情况
    if response.url == self.start_urls[0]:
        page = "index"
    else:
        # 从URL中提取最后一个非空的部分作为文件名
        url_parts = [part for part in response.url.split("/") if part]
        page = url_parts[-2] if len(url_parts) >=2 else url_parts[-1]
    filename = '%s.html' % page
    with open(filename, 'wb') as f:
        f.write(response.body)

自定义User-Agent绕过反爬

在Scrapy项目的settings.py文件里添加浏览器的User-Agent:

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'

你也可以换成你当前使用的浏览器的真实User-Agent,这样更难被识别。

如果还是不行,还可以尝试在settings.py中开启CookiesMiddleware,或者添加下载延迟:

DOWNLOAD_DELAY = 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:52:35