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

Python Scrapy爬取网站遇HTTP 403错误,如何获取请求权限?

爬取imovelweb.com.br遇到HTTP 403错误的解决方法

问题描述

练习网页爬取时,尝试访问https://www.imovelweb.com.br网站,持续收到HTTP 403错误,需要解决请求权限问题。

爬虫代码

from typing import List

import scrapy


class ResearchSpider(scrapy.Spider):
    name = 'pesquisa'
    start_urls: list[str] = ['https://www.imovelweb.com.br/imoveis-aluguel-paraiba.html?iv_=__iv_p_1_a_17808488596_g_139189246037_w_dsa-1687663569069_h_20089_ii_20098_d_c_v__n_g_c_611609016411_k__m__l__t__e__r__vi__']

    def parse(self, response):
        for pesquisa in response.css('.js-listing-labels-link'):
            yield{
                'address': pesquisa.css('.property-card__address::text').get(),
                'area': pesquisa.css('.js-property-card-detail-area::text').get(),
                'rooms': pesquisa.css('.js-property-detail-rooms .js-property-card-value::text').get(),
                'bathroom': pesquisa.css('.js-property-detail-bathroom .js-property-card-value::text').get(),
                'garages': pesquisa.css('.js-property-detail-garages .js-property-card-value::text').get(),
                'prices': pesquisa.css('p::text').get()[5:-1]}

终端执行命令

scrapy shell
fetch('https://www.imovelweb.com.br/imoveis-paraiba.html')

报错日志

2022-09-16 14:11:14 [filelock] DEBUG: Attempting to release lock 1292395054608 on C:\Users\Familia\anaconda3\lib\site-packages\tldextract\.suffix_cache/pubsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2022-09-16 14:11:14 [filelock] DEBUG: Lock 1292395054608 released on C:\Users\Familia\anaconda3\lib\site-packages\tldextract\.suffix_cache/publicsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2022-09-16 14:11:16 [scrapy.core.engine] DEBUG: Crawled (403) <GET https://www.imovelweb.com.br/imoveis-paraiba.html> (referer: None)

解决方法

HTTP 403错误通常是网站反爬机制识别到非浏览器请求导致的,以下是针对性解决方案:

  • 配置真实请求头
    网站会校验User-Agent字段,默认Scrapy的User-Agent易被识别。在项目settings.py中添加:

    DOWNLOAD_DELAY = 2
    USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    DEFAULT_REQUEST_HEADERS = {
        'Referer': 'https://www.imovelweb.com.br/'
    }
    

    模拟浏览器发起请求,同时添加Referer字段模拟站内跳转。

  • 启用随机User-Agent中间件
    单一User-Agent容易被封禁,安装scrapy-user-agents库后,在settings.py中配置中间件:

    DOWNLOADER_MIDDLEWARES = {
        'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
        'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 400,
    }
    

    每次请求随机使用不同浏览器的User-Agent,降低被识别概率。

  • 遵守robots.txt协议
    先查看网站robots.txt确认目标页面是否允许爬取,若网站禁止对应路径,需调整爬取范围或联系网站申请权限。

  • 控制请求频率
    除设置DOWNLOAD_DELAY,还可在settings.py中限制并发请求:

    CONCURRENT_REQUESTS = 1
    CONCURRENT_REQUESTS_PER_DOMAIN = 1
    

    模拟人类浏览节奏,避免频繁触发反爬机制。

  • 简化请求参数
    你的起始URL带有长串追踪参数,可尝试简化为https://www.imovelweb.com.br/imoveis-aluguel-paraiba.html再测试,避免携带爬虫特征明显的参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:15:31