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

使用Beautiful Soup爬取网站表格:为何仅返回229行?如何获取全部数据

解决动态加载表格数据爬取不全的问题

问题根源

你遇到的是典型的动态内容加载问题:目标网站的表格数据并非一开始就嵌入在静态HTML里,而是通过JavaScript在页面加载后(比如滚动页面触发)从后端接口拉取并渲染的。直接用requests.get()只能获取页面初始的静态HTML,自然拿不到后续加载的内容,所以数据行数远少于浏览器中看到的。

两种可行解决方案

方案1:直接调用后端数据接口(推荐)

打开浏览器开发者工具(F12),切换到「网络」标签,刷新页面后滚动到底部,观察XHR/fetch类型的请求,找到返回服务数据的接口(通常是JSON格式)。直接请求这个接口能高效获取完整数据:

import pandas as pd
import requests

# 替换为你在开发者工具中找到的真实API接口地址
api_url = "https://sosyalkedi.com/api/services"
response = requests.get(api_url)
data = response.json()

# 根据接口返回的JSON结构整理成DataFrame
df = pd.DataFrame(data)
print(df.head())
print(f"总数据行数:{len(df)}")

方案2:用浏览器自动化工具渲染完整页面

如果找不到接口或接口有反爬限制,就用playwright或selenium模拟浏览器加载页面,等所有数据渲染完成后再解析:

import pandas as pd
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)  # 设置headless=True可后台运行
    page = browser.new_page()
    page.goto("https://sosyalkedi.com/services")
    
    # 滚动到页面底部,触发所有数据加载
    page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
    page.wait_for_timeout(2000)  # 等待2秒确保数据加载完成
    
    # 获取渲染后的完整HTML
    html = page.content()
    browser.close()
    
    # 后续解析逻辑和你原来的代码一致
    soup = BeautifulSoup(html, "html.parser")
    all_data = []
    for tr in soup.select("tr:not(:has(td[colspan], th))"):
        prev = tr.find_previous("td", attrs={"colspan": True})
        tds = [td.get_text(strip=True) for td in tr.select("td")]
        all_data.append([prev.get_text(strip=True), *tds[:5]])

    df = pd.DataFrame(
        all_data,
        columns=["Parent", "ID", "Servis", "1000 adet fiyatı", "Minimum Sipariş", "Maksimum Sipariş"],
    )
    print(df.head())
    print(f"总数据行数:{len(df)}")

注意事项

  • 使用playwright需要先安装依赖:pip install playwright,再运行playwright install安装浏览器驱动。
  • 若网站有反爬机制,可添加自定义请求头、设置随机延迟或使用代理规避限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:13:02