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

使用Python requests获取cardmarket.com页面与浏览器返回内容不一致问题

解决cardmarket.com卡牌价格爬取的Cloudflare验证问题

问题根源

cardmarket网站启用了Cloudflare反爬机制,你用requests/urllib3发起的纯HTTP请求缺少浏览器的JS执行环境和Cookie上下文,直接触发人机验证,所以返回的是验证页面而非目标卡牌价格页面。

两种可行解决办法

1. 用Playwright模拟真实浏览器

Playwright可以启动真正的浏览器(如Chrome),自动处理JS渲染、Cookie等浏览器环境要素,轻松绕过Cloudflare验证。

先安装依赖:

pip install playwright
playwright install chromium

替换后的代码:

from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup as bs

card = 'sol+ring'
url = f'https://www.cardmarket.com/en/Magic/Products/Search?idCategory=0&idExpansion=0&searchString=%5B{card}%5D&exactMatch=on&onlyAvailable=on&idRarity=0&sortBy=price_asc&perSite=1'

with sync_playwright() as p:
    # headless=False可显示浏览器窗口,改成True可后台运行
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto(url)
    # 等待价格元素加载完成再获取页面内容
    page.wait_for_selector('.article-price')
    html = page.content()
    browser.close()

soup = bs(html, 'html.parser')
# 提取最低价格示例
lowest_price = soup.find(class_='article-price').text.strip()
print(f"卡牌最低售价: {lowest_price}")

2. 用cfscrape专门破解Cloudflare验证

cfscrape是针对Cloudflare反爬的专用库,需要配合Node.js环境(用于执行Cloudflare的验证JS)。

先安装依赖:

pip install cfscrape
# 需前往Node.js官网下载安装Node.js

替换后的代码:

import cfscrape
from bs4 import BeautifulSoup as bs

card = 'sol+ring'
url = f'https://www.cardmarket.com/en/Magic/Products/Search?idCategory=0&idExpansion=0&searchString=%5B{card}%5D&exactMatch=on&onlyAvailable=on&idRarity=0&sortBy=price_asc&perSite=1'

# 创建带Cloudflare破解能力的爬虫对象
scraper = cfscrape.create_scraper()
html = scraper.get(url).text
soup = bs(html, 'html.parser')

print(soup.prettify())

注意事项

  • 不要频繁发起请求,建议添加time.sleep(2)这类间隔,避免被网站封禁IP。
  • 严格遵守网站服务条款与robots.txt规则,避免违规爬取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:52:00