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

Python爬虫如何绕过Cloudflare抓取https://dzkuensel.com网站内容?

绕过Cloudflare抓取https://dzkuensel.com内容的可行方案

方案1:使用undetected-chromedriver(规避Selenium检测)

undetected-chromedriver是修改过的ChromeDriver,能隐藏自动化工具特征,绕过Cloudflare的人机检测,适合需要渲染JS动态内容的场景。

  • 安装依赖:
pip install undetected-chromedriver selenium
  • 示例代码:
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import time
import random

# 初始化浏览器
driver = uc.Chrome()
try:
    # 访问目标网站
    driver.get("https://dzkuensel.com")
    
    # 等待核心内容加载(可根据页面实际元素调整选择器)
    WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "article"))
    )
    
    # 随机延迟,降低检测风险
    time.sleep(random.uniform(1.5, 3))
    
    # 获取页面源码并解析
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, "html.parser")
    articles = soup.find_all("article")
    
    for idx, article in enumerate(articles, 1):
        title = article.find("h2").text.strip() if article.find("h2") else "无标题"
        print(f"文章{idx}:{title}")
finally:
    driver.quit()
  • 注意事项:若遇到临时手动验证弹窗,可短暂暂停代码手动完成验证;后续请求可复用本次会话的cookies,减少验证触发概率。

方案2:使用curl-cffi模拟浏览器TLS指纹

curl-cffi能模拟真实浏览器的TLS握手行为,Cloudflare无法识别为爬虫,适合静态内容抓取场景,性能比Selenium更高。

  • 安装依赖:
pip install curl-cffi
  • 示例代码:
from curl_cffi import requests
from bs4 import BeautifulSoup
import time
import random

# 模拟Chrome浏览器的TLS指纹
session = requests.Session(impersonate="chrome110")

try:
    # 随机延迟
    time.sleep(random.uniform(1, 2))
    response = session.get("https://dzkuensel.com", timeout=30)
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, "html.parser")
        print(f"页面标题:{soup.title.text.strip()}")
        # 解析文章列表
        articles = soup.find_all("article")
        for article in articles:
            link = article.find("a")["href"]
            print(f"文章链接:{link}")
    else:
        print(f"请求失败,状态码:{response.status_code}")
except Exception as e:
    print(f"请求出错:{str(e)}")
  • 注意事项:如果网站内容完全依赖JS动态渲染,该方法无法获取完整内容,需切换到方案1。

方案3:辅助优化策略(降低被检测概率)

不管使用哪种核心方案,结合以下策略能进一步提升成功率:

  • 控制请求频率:用time.sleep(random.uniform(2,5))设置随机延迟,避免短时间内大量请求。
  • 随机请求头:用fake-useragent生成真实浏览器UA,示例:
from fake_useragent import UserAgent
ua = UserAgent()
headers = {"User-Agent": ua.random}
# 在curl-cffi中使用:session.get(url, headers=headers)
# 在undetected-chromedriver中使用:driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', {'headers': headers})
  • 复用会话cookies:成功访问一次后,保存cookies到本地,后续请求直接携带,减少验证次数。
  • 使用高匿代理:若IP被封禁,切换高匿代理IP(优先选择付费可靠代理,避免公开免费代理)。

内容的提问来源于stack exchange,提问作者Bernardino Sassoli de' Bianchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:10:51