Python网页爬取无法获取目标网站指定class内容的方案咨询
解决Bloxflip Crash页面动态内容爬取问题
问题原因
目标元素是通过JavaScript动态渲染生成的,requests获取的是服务器返回的初始静态HTML,此时动态内容还未加载,所以BeautifulSoup找不到对应的元素。
解决方案
方法一:使用Selenium模拟浏览器加载页面
Selenium会模拟真实浏览器行为,执行页面的JavaScript代码,获取渲染后的完整页面内容。
步骤:
- 安装Selenium:
pip install selenium - 下载对应浏览器的驱动(如ChromeDriver,需与浏览器版本匹配)
- 编写代码:
from selenium import webdriver 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 def scrape(): # 初始化Chrome浏览器驱动 driver = webdriver.Chrome() driver.get("https://bloxflip.com/crash") try: # 等待目标元素加载完成,最多等待10秒 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "lastestHistory")) ) # 获取渲染后的页面源码 page_source = driver.page_source doc = BeautifulSoup(page_source, "html.parser") crash = doc.find_all("div", class_="gameLatest gameLatestHorizontal lastestHistory") print(crash) finally: # 关闭浏览器 driver.quit() scrape()
方法二:直接调用网站API(更高效)
动态加载的内容通常来自后端API,可通过浏览器开发者工具抓包找到对应接口,直接请求API获取数据:
- 打开浏览器开发者工具(F12),切换到「Network」标签
- 刷新页面,筛选「XHR」或「Fetch」类型的请求,找到返回Crash历史数据的接口
- 复制该接口的URL,用
requests直接请求,注意带上必要的请求头(如User-Agent,部分接口可能需要登录态Cookie)
示例代码(实际接口需自行抓包确认):
import requests def scrape_api(): # 替换为实际抓包得到的API接口URL url = "https://api.bloxflip.com/crash/history" headers = { "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" # 若需要Cookie,可从浏览器开发者工具中复制对应字段 } response = requests.get(url, headers=headers) if response.status_code == 200: data = response.json() print(data) else: print(f"请求失败,状态码:{response.status_code}") scrape_api()
注意事项
- 部分网站有反爬机制,需控制请求频率,模拟真实浏览器的请求头
- 若网站使用Cloudflare验证,可使用
undetected-chromedriver替代普通ChromeDriver规避检测
内容的提问来源于stack exchange,提问作者Kai Oda
相关产品推荐
相关产品推荐

