Selenium配合BeautifulSoup获取完整HTML遇超时问题排查
网页爬取问题解决方案
一、Selenium TimeoutException 解决
- 延长等待时长:原代码设置的5秒等待时间可能不足以让页面完成渲染,建议调整为10-15秒。
- 优化等待条件:原代码等待表格元素可见,但有时表格框架先加载、内容后渲染,换成等待表格内的
tbody元素存在会更精准,确保数据已加载。 - 修正后的代码:
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 driver = webdriver.Edge() url = 'https://ffp.hnair.com/FFPClub/en/hqjf/hkjl/gszl/201809/t20180910_25329.html' driver.get(url) # 延长等待时间至10秒,等待表格tbody节点加载完成 wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".HcTable tbody"))) soup = BeautifulSoup(driver.page_source, 'html.parser') target_table = soup.find('table', class_='HcTable') print(target_table.prettify()) # 关闭浏览器进程 driver.quit()
二、requests+BeautifulSoup无法获取tbody内容的原因
类名HcTable是正确的,问题出在页面表格内容是JavaScript动态渲染的:仅用requests请求只能拿到页面初始HTML(仅包含表格框架),tbody内的实际数据是页面加载后通过JS动态生成或AJAX请求拉取的,所以静态爬取不到。必须借助浏览器渲染工具(如Selenium、Playwright)才能获取完整渲染后的页面内容。
额外优化建议
如果想避免使用浏览器渲染工具,可以尝试抓包获取数据接口:打开浏览器开发者工具(F12)→ 切换到Network标签 → 刷新页面,筛选XHR/fetch类型请求,找到返回表格数据的接口,直接请求该接口获取数据,效率会更高。
内容的提问来源于stack exchange,提问作者user75667
相关产品推荐
相关产品推荐

