You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法抓取完整HTML及无标识表格的提取方案求助

解决动态加载表格的提取问题

先修正你当前代码的问题

你的代码存在几处逻辑错误:

  • 重复导入BeautifulSoup
  • HTMLFileToBeOpened变量未定义,这段读取本地文件的逻辑完全多余,你已经通过requests.get获取了网页内容
  • 同时使用html.parser和lxml两个解析器,逻辑混乱

修正后的基础请求代码(但仍无法获取动态表格):

from bs4 import BeautifulSoup
import requests

URL = "https://www.jaivikkheti.in/inputsupplier"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")
print(soup.body.prettify())

为什么拿不到表格?

该网站的表格数据是JavaScript动态渲染的(你混淆了Java和JavaScript的概念),requests只能获取初始静态HTML,无法执行页面中的JS代码,因此看不到渲染后的表格内容。

解决方案:使用浏览器渲染工具抓取

推荐用playwright(自带驱动,配置简洁)或selenium模拟浏览器加载页面,等待JS渲染完成后再提取表格。

方法1:使用Playwright

  1. 安装依赖:
pip install playwright
playwright install chromium
  1. 提取表格的代码:
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)  # 无界面模式运行
    page = browser.new_page()
    page.goto("https://www.jaivikkheti.in/inputsupplier")
    page.wait_for_load_state("networkidle")  # 等待网络空闲,确保JS加载完成
    
    # 获取渲染后的完整HTML
    html_content = page.content()
    browser.close()
    
    # 解析HTML提取表格(无class/id,通过标签定位)
    soup = BeautifulSoup(html_content, "html.parser")
    target_table = soup.find("table")
    
    # 提取表格数据到列表
    table_data = []
    if target_table:
        rows = target_table.find_all("tr")
        for row in rows:
            cols = row.find_all(["td", "th"])
            col_texts = [col.get_text(strip=True) for col in cols]
            table_data.append(col_texts)
    
    # 打印或处理数据
    for row in table_data:
        print(row)

方法2:使用Selenium

  1. 安装依赖和驱动:
pip install selenium

下载对应浏览器的驱动(如Chrome的chromedriver),确保驱动版本与浏览器匹配,将驱动路径配置到环境变量或代码中。

  1. 提取表格的代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 配置Chrome无界面模式
chrome_options = Options()
chrome_options.add_argument("--headless=new")
driver = webdriver.Chrome(options=chrome_options)

driver.get("https://www.jaivikkheti.in/inputsupplier")
# 显式等待表格加载,比sleep更可靠
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "table")))

# 获取渲染后的HTML
html_content = driver.page_source
driver.quit()

# 解析提取表格
soup = BeautifulSoup(html_content, "html.parser")
target_table = soup.find("table")

table_data = []
if target_table:
    rows = target_table.find_all("tr")
    for row in rows:
        cols = row.find_all(["td", "th"])
        col_texts = [col.get_text(strip=True) for col in cols]
        table_data.append(col_texts)

for row in table_data:
    print(row)

额外优化思路:寻找后端API接口

打开浏览器开发者工具(F12),切换到网络标签,刷新页面后筛选XHR/Fetch请求,查看是否有直接返回表格数据的API接口。如果找到,直接用requests请求接口获取JSON数据,这种方式比渲染页面更高效。


内容的提问来源于stack exchange,提问作者Ritesh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 13:03:27