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
相关产品推荐
相关产品推荐

