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

使用CURL抓取MarketWatch页面与Chrome源码不一致问题求助

解决MarketWatch页面抓取内容不一致的问题

核心原因推测

  • 网站启用反爬机制:检测请求头完整性、浏览器指纹(如User-Agent、Cookie、渲染特征),普通请求被判定为非真实浏览器访问
  • 页面采用动态加载:核心数据通过AJAX/Fetch接口异步加载,静态请求或未等待渲染的Selenium无法获取完整内容

具体解决方法

1. 优化CURL请求(模拟真实浏览器)

复制Chrome当前页面的完整请求头(包括有效Cookie),确保请求和浏览器完全一致,示例命令:

curl "https://www.marketwatch.com/tools/screener/market?exchange=nasdaq&subreport=largestpercentgainreport" ^
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" ^
  -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" ^
  -H "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8" ^
  -H "Referer: https://www.marketwatch.com/" ^
  -H "Cookie: 替换为Chrome中当前页面的Cookie内容" ^
  -H "Upgrade-Insecure-Requests: 1" ^
  -H "Sec-Fetch-Dest: document" ^
  -H "Sec-Fetch-Mode: navigate"

2. 调整Selenium配置(绕过自动化检测)

普通ChromeDriver易被识别,需配置新版无头模式并隐藏自动化特征:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

options = Options()
# 启用新版无头模式,模拟真实浏览器行为
options.add_argument("--headless=new")
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
# 禁用自动化标识
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=options)
# 执行脚本隐藏webdriver属性
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

driver.get("https://www.marketwatch.com/tools/screener/market?exchange=nasdaq&subreport=largestpercentgainreport")
# 等待动态内容加载完成(替换为页面实际存在的动态元素选择器)
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".table__body-row"))
)
# 获取渲染后的完整源码
full_html = driver.page_source

driver.quit()

3. 直接请求数据接口

打开Chrome开发者工具(F12)→ 网络面板→ 筛选XHR/Fetch,刷新页面找到加载股票数据的接口,直接请求该接口获取JSON格式数据,比抓取HTML更高效稳定。

注意事项

  • 不要高频请求,避免IP被封禁
  • Cookie有效期有限,需定期从浏览器更新
  • 网站反爬规则可能变动,需根据实际情况调整请求参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:52:14