BeautifulSoup无法找到页面中存在的table元素问题求助
为什么爬不到目标表格?
目标页面的表格是JavaScript动态渲染生成的:你用requests库请求得到的只是页面的初始静态HTML,此时页面里的JS还没执行,schedulecanvas容器是空的,表格元素根本还没被生成,所以BeautifulSoup自然找不到对应的table标签。
解决办法
方法1:用Selenium模拟浏览器加载(快速上手)
Selenium能模拟真实浏览器的运行,等页面JS执行完、表格加载出来后,再获取完整的页面源码,这样就能拿到包含表格的HTML了。
示例代码:
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By url = 'https://www.cbc.ca/sports/basketball/cebl/broadcast' # 初始化Chrome浏览器(需要提前安装对应版本的ChromeDriver) driver = webdriver.Chrome() driver.get(url) # 最多等10秒,直到表格元素出现 try: WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, 'table')) ) # 获取加载完成后的页面源码 full_page = driver.page_source soup = BeautifulSoup(full_page, 'lxml') target_table = soup.find('table') print(target_table) finally: # 用完记得关闭浏览器 driver.quit()
方法2:直接抓接口拿数据(更高效)
打开浏览器F12开发者工具,切换到「Network」标签,刷新页面后筛选「XHR/Fetch」类型的请求,找到返回赛程表格数据的接口,直接用requests请求这个接口就能拿到JSON格式的原始数据,不用再解析HTML,效率更高。
内容的提问来源于stack exchange,提问作者Danish
相关产品推荐
相关产品推荐

