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

使用BeautifulSoup爬取https://www.cora.fr时遭遇Incapsula反爬拦截,如何获取页面实际内容?

解决Incapsula反爬拦截问题

你看到的这个页面是Incapsula反爬防护机制的拦截响应——网站检测到你的请求来自非浏览器的自动化工具,所以返回了这个带iframe的验证页面,而非实际内容。下面是几个可行的解决方向:

1. 给请求添加浏览器标识(Headers)

你的urllib.request请求没有携带任何浏览器相关的头信息,很容易被反爬机制识别。改用更易用的requests库,并添加模拟真实浏览器的User-Agent(及其他必要头):

import requests
from bs4 import BeautifulSoup

url = "https://www.cora.fr"
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",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5"
}

response = requests.get(url, headers=headers)
html_soup = BeautifulSoup(response.text, 'html.parser')
print(html_soup.prettify())

2. 使用自动化浏览器工具(Selenium/Playwright)

Incapsula会执行JavaScript验证,静态HTTP请求可能绕不过去。用Selenium模拟真实浏览器的操作行为,让网站认为是用户在访问:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time

options = Options()
options.add_argument("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")
# 可选:开启无头模式,不弹出浏览器窗口
# options.add_argument("--headless=new")

driver = webdriver.Chrome(options=options)
driver.get("https://www.cora.fr")

# 等待页面加载完成(可根据元素添加更精准的显式等待)
time.sleep(3)

page_html = driver.page_source
html_soup = BeautifulSoup(page_html, 'html.parser')
print(html_soup.prettify())

driver.quit()

Playwright的自动等待机制更友好,你也可以尝试用它实现类似逻辑。

3. 保持会话并处理Cookie

部分反爬机制会在首次请求时设置验证Cookie,后续请求需要携带这些Cookie才能正常访问。用requests.Session()来维持会话状态:

import requests
from bs4 import BeautifulSoup

url = "https://www.cora.fr"
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"
}

session = requests.Session()
# 先发起一次请求获取验证Cookie
session.get(url, headers=headers)
# 再用同一个会话请求实际内容
response = session.get(url, headers=headers)

html_soup = BeautifulSoup(response.text, 'html.parser')
print(html_soup.prettify())

4. 控制爬取频率

即使绕开了初始拦截,频繁请求也会触发网站的封禁机制。记得在请求之间添加延时:

import time
# 两次请求间隔2秒,可根据网站调整
time.sleep(2)

最后提醒:爬取网站前一定要查看网站的robots.txt,确保你的爬取行为符合网站规则,避免法律风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:27:30