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

在Colab环境爬取英国议会网站遭遇403错误的解决咨询

解决Colab访问英国议会下议院页面403错误的方案

问题描述

尝试在Colab环境中访问英国议会下议院议员页面(https://members.parliament.uk/members/commons)时持续出现403错误,网站请求头限制严格,即使配置了完整请求头仍无法解决。

已尝试的代码

简单请求头版本:

from urllib.request import urlopen, Request

url = "https://members.parliament.uk/members/commons"

headers={'User-Agent': 'Mozilla/5.0'}

request= Request(url=url, headers=headers) 
response = urlopen(request)
data = response.read()

完整请求头配置版本:

headers = {
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15',
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
  'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  'Accept-Encoding': 'none',
  'Accept-Language': 'en-US,en;q=0.8',
  'Connection': 'keep-alive'
}

可行解决办法

1. 用Requests会话补充真实请求头字段

网站可能会验证请求的连贯性和更多浏览器特征,使用requests.Session()维持会话,并补充Referer、DNT等字段,更贴近真实浏览器行为:

import requests

url = "https://members.parliament.uk/members/commons"
session = requests.Session()

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Referer': 'https://members.parliament.uk/',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
}

# 可选:手动添加浏览器访问该页面后获取的有效Cookie
# session.cookies.set('SESSION_ID', 'your_cookie_value')

try:
    response = session.get(url, headers=headers)
    response.raise_for_status()
    print("请求成功,页面片段:", response.text[:500])
except requests.exceptions.HTTPError as e:
    print(f"请求失败:{e}")

2. 用Selenium模拟真实浏览器渲染

如果网站有JS反爬或行为检测,直接用Selenium启动无头Chrome模拟用户操作,绕过请求头限制(Colab需先安装依赖):

# 安装依赖
!pip install selenium
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 配置无头Chrome
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36')

# 启动浏览器并访问页面
driver = webdriver.Chrome(options=options)
driver.get("https://members.parliament.uk/members/commons")

print("页面片段:", driver.page_source[:500])
driver.quit()

3. 更换代理IP(Colab环境适配)

Colab的公用IP可能被网站列入黑名单,使用可靠的代理IP更换请求来源,示例(需替换为有效代理):

import requests

url = "https://members.parliament.uk/members/commons"
proxies = {
    'http': 'http://your-proxy-ip:port',
    'https': 'https://your-proxy-ip:port'
}

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

try:
    response = requests.get(url, headers=headers, proxies=proxies)
    response.raise_for_status()
    print(response.text[:500])
except requests.exceptions.HTTPError as e:
    print(f"请求失败:{e}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:45:41