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

使用BeautifulSoup抓取JavaScript加载表格遇到问题求助

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

Hey there! I see you're having trouble scraping that JavaScript-loaded table—totally get it, dynamic content can be a head-scratcher when you're just starting out with web scraping and prototyping. Let's break down what's going wrong and fix it together.

为什么你的当前代码拿不到表格?

Your current setup uses requests and BeautifulSoup, which are perfect for static HTML pages. But here's the issue: requests only fetches the initial raw HTML the server sends immediately. The table you're trying to scrape is loaded after the page loads, using JavaScript to pull data from a backend API and render it on the screen. So when your code searches for the table, it doesn't exist yet—because the JavaScript hasn't had a chance to run!

解决方案1:用Selenium模拟浏览器(新手友好的直观方法)

Selenium lets you control a real browser, which will execute all the page's JavaScript and load the full content just like a human would. Here's how to adjust your code:

  • First, install Selenium and download a browser driver (like ChromeDriver for Chrome):

    pip install selenium
    

    (Make sure the driver matches your browser version and is either in your system PATH, or you specify its file path in the code.)

  • Updated code example:

    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
    import time
    
    # Initialize Chrome driver (swap with Firefox/Edge driver if you prefer)
    driver = webdriver.Chrome()
    # Fixed the extra space in your URL—spaces can break requests!
    url = 'https://onlineservice.cvo.org/webs/cvo/register/#/search/toronto/0/1/0/10'
    
    try:
        driver.get(url)
        # Wait up to 10 seconds for the table to appear (adjust timeout if needed)
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'table'))
        )
        # Optional: Add a short delay to ensure all table data is fully rendered
        time.sleep(2)
        # Grab the fully rendered page source (with the table included!)
        page_source = driver.page_source
        soup = BeautifulSoup(page_source, 'html.parser')
        tables = soup.find_all(class_='table')
        print(tables)
    finally:
        # Always close the driver to avoid leaving browser processes running
        driver.quit()
    

解决方案2:直接抓取后端API(更高效的进阶方法)

If you want to skip using a browser, you can find the API endpoint the page uses to load the table data directly. This is faster and uses fewer resources. Here's how to find it:

  • Open your browser's Developer Tools (press F12)
  • Go to the Network tab, then reload the page
  • Filter requests by "XHR" to narrow down to data-fetching calls
  • Look for a request that returns JSON data containing the table content—this is your target API endpoint

Once you have the endpoint, you can use requests to call it directly, no browser needed. Example code:

import requests

# Replace this with the actual API endpoint you found in Developer Tools
api_url = "https://onlineservice.cvo.org/webs/cvo/register/api/search"
# Copy headers from the browser's request (like User-Agent) to avoid being blocked
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"
}
# Add any parameters the API uses (like location, page number, results per page)
params = {
    "location": "toronto",
    "page": 1,
    "perPage": 10
}

response = requests.get(api_url, headers=headers, params=params)
data = response.json()
# Now you can parse the JSON data directly instead of dealing with HTML!
print(data)

快速小提示

  • Always check the website's robots.txt and terms of service before scraping to make sure you're allowed to access their data.
  • Selenium is great for learning and debugging dynamic sites, but API calls are the way to go for production scraping since they're faster and more reliable.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:55:33