Python脚本爬取https://next.newsimpact.com/NewsWidget/Live表格遇XPath及源码问题
嘿,我来帮你排查这个问题!你遇到的情况其实很常见——页面里的表格是动态渲染出来的,所以直接爬取静态页面源码根本找不到它,XPath自然也就抓不到任何结果啦。下面给你两个靠谱的解决思路:
解决思路一:用浏览器自动化工具渲染页面
因为表格是通过JavaScript动态生成的,静态请求(比如requests.get)只能拿到未渲染的原始HTML,必须让浏览器执行完JS、渲染好完整DOM后再提取元素。推荐用Selenium或者Playwright,这里拿Selenium举个实操例子:
- 先安装依赖:
pip install selenium,同时要安装对应浏览器的驱动(比如ChromeDriver,版本要和你的Chrome浏览器匹配) - 示例代码:
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 # 初始化Chrome浏览器 driver = webdriver.Chrome() try: driver.get("https://next.newsimpact.com/NewsWidget/Live") # 等待表格加载完成(最多等10秒),你可以替换成自己找到的表格XPath wait = WebDriverWait(driver, 10) target_table = wait.until(EC.presence_of_element_located((By.XPATH, "//table[contains(@class, 'news-widget-table')]"))) # 提取表格内的数值,这里以遍历所有单元格为例 rows = target_table.find_elements(By.TAG_NAME, "tr") for row in rows: cols = row.find_elements(By.TAG_NAME, "td") cell_values = [col.text for col in cols if col.text.strip()] if cell_values: print(cell_values) finally: # 关闭浏览器 driver.quit()
小提示:你可以在浏览器F12的Elements面板里,找到目标表格后右键「复制XPath」,替换代码里的路径,这样定位会更准确。
解决思路二:直接抓取后端数据接口(更高效)
动态页面的表格数据通常是通过AJAX请求从后端API获取的,这种方式比模拟浏览器快很多:
- 打开浏览器F12→切换到「Network」标签页,刷新页面
- 在「XHR」或「Fetch」分类里,找返回JSON格式数据的请求(可以看请求的Response内容,找和表格匹配的数据)
- 拿到这个API的URL后,直接用
requests请求并解析数据:
import requests # 替换成你找到的实际API接口URL api_url = "xxxxxxx" response = requests.get(api_url) data = response.json() # 根据返回的JSON结构提取你需要的数值 print(data)
额外调试技巧
你可以先在浏览器开发者工具的Elements面板里,用Ctrl+F搜索你的XPath,看看能不能定位到表格:
- 如果能找到:说明是爬取方式的问题(静态请求没渲染JS),用上面两种方法解决
- 如果找不到:说明你的XPath写得不对,需要调整路径,比如通过表格的类名、ID或者父元素来定位
内容的提问来源于stack exchange,提问作者Nick Syiek
相关产品推荐
相关产品推荐

