使用Python Selenium爬取彭博等财经网站的页面解析问题求助
解决Selenium爬取彭博/金融时报页面异常的办法
核心问题根源
这类金融网站普遍采用动态渲染+强反爬机制,要么是你没等页面完全渲染就急于获取数据,要么是Selenium的自动化特征被网站识别,返回了反爬用的脚本内容;另外Cookie授权未处理会导致页面停留在授权环节,根本无法加载正常内容。
具体解决步骤
先处理Cookie授权,再进行爬取
必须先完成Cookie授权操作,否则页面不会加载正常内容。示例代码(注意不同网站的按钮选择器需要自行抓取):from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By try: # 等待同意按钮可点击,最长等待5秒 accept_btn = WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Accept") or contains(text(), "同意")]')) ) accept_btn.click() except: # 无授权弹窗则跳过 pass等待页面完全加载,避免过早获取数据
动态网站需要时间完成渲染,直接获取innerHTML只能拿到未渲染的脚本内容。可以等待页面状态为complete,或者等待关键元素加载完成:# 等待页面加载完成 WebDriverWait(driver, 10).until( lambda d: d.execute_script('return document.readyState') == 'complete' ) # 也可以等待关键元素出现,比如金融时报的正文容器 # WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "article-body"))) # 再获取页面内容 html = driver.find_element(By.TAG_NAME, 'body').get_attribute("innerHTML")隐藏Selenium特征,规避反爬检测
多数网站会通过navigator.webdriver属性识别自动化工具,返回异常内容。可以通过配置ChromeOptions和执行JS来隐藏特征:from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 禁用自动化控制标识 options.add_argument('--disable-blink-features=AutomationControlled') options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options) # 执行JS修改navigator.webdriver属性 driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")换用driver.page_source获取完整源码
有时body.innerHTML会遗漏部分内容,尝试使用driver.page_source获取整个页面的HTML:html = driver.page_source
额外注意事项
这类金融网站反爬严格,频繁请求易触发IP封禁,建议每次请求后添加2-5秒延时,必要时使用代理IP。同时需遵守网站使用条款,避免过度爬取引发法律风险。
内容的提问来源于stack exchange,提问作者Georgik
相关产品推荐
相关产品推荐

