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

使用BeautifulSoup4请求URL遇403错误:本地正常虚拟机异常

解决请求fc-moto.de返回403错误的问题

问题背景

尝试用BeautifulSoup4抓取以下页面内容:

https://www.fc-moto.de/epages/fcm.sf/ru_RU/?ObjectPath=/Shops/10207048/Products/Bogotto-Losail-Ladies-2PC-Leathersuit/SubProducts/Bogotto-Losail-Ladies-2PC-Leathersuit-0007

本地运行正常,但在Ubuntu 20.04虚拟主机上执行时返回403错误。使用的代码如下:

from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import requests

url = "https://www.fc-moto.de/epages/fcm.sf/ru_RU/?ObjectPath=/Shops/10207048/Products/Bogotto-Losail-Ladies-2PC-Leathersuit/SubProducts/Bogotto-Losail-Ladies-2PC-Leathersuit-0007"
UserAgent().chrome

req = requests.get(url, headers={'User-Agent': UserAgent().chrome})
print(req.response)
for key, value in req.request.headers.items():
  print(key+": "+value)

执行后输出:

return (<Response [403]>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
)

解决方案

1. 补充完整请求头

网站可能校验更多请求头字段,模拟真实浏览器的完整请求头能降低被拦截概率:

from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import requests

ua = UserAgent()
url = "https://www.fc-moto.de/epages/fcm.sf/ru_RU/?ObjectPath=/Shops/10207048/Products/Bogotto-Losail-Ladies-2PC-Leathersuit/SubProducts/Bogotto-Losail-Ladies-2PC-Leathersuit-0007"

headers = {
    'User-Agent': ua.chrome,
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    'Referer': 'https://www.fc-moto.de/',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
}

req = requests.get(url, headers=headers)
print(req.status_code)
# 后续解析逻辑
soup = BeautifulSoup(req.text, 'html.parser')

2. 使用会话保持连接

用requests.Session()维持会话,模拟浏览器的持续访问状态:

session = requests.Session()
session.headers.update(headers)
req = session.get(url)

3. 排查IP封禁问题

虚拟主机的IP可能被网站加入黑名单,可尝试更换IP(如使用代理),或联系主机服务商确认IP状态。

4. 添加请求延迟

网站可能有访问频率限制,请求前添加随机延迟避免触发拦截:

import time
import random

time.sleep(random.uniform(1, 3))  # 随机延迟1-3秒再发起请求

5. 手动指定有效UserAgent

若fake_useragent生成的UA过期,直接指定最新的Chrome浏览器UA:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    # 其他头字段
}

内容的提问来源于stack exchange,提问作者Еремеев Евгений

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:06:15