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

使用Python urllib和BeautifulSoup爬取物流页面表格仅返回script如何解决

问题原因

你要爬取的页面目标物流表格属于前端动态渲染数据:初始静态HTML返回时仅包含JS执行逻辑,表格数据是页面加载完成后,JS异步调用后端接口获取数据后才渲染到DOM树中的。urllib仅能获取未执行JS的初始静态源码,因此无法提取到目标表格。

解决方案

提供两种可落地的处理方案:

  • 方案1:接口逆向直接拉取结构化数据
    打开浏览器F12开发者工具,切换到「网络」面板,筛选「XHR/ Fetch」类型的请求,刷新页面后即可找到加载物流数据的后端接口。直接构造请求调用该接口即可拿到JSON格式的结构化物流数据,无需解析HTML,爬取效率最高。请求时注意匹配浏览器请求头中的User-Agent、Referer等参数,避免触发站点反爬策略。

  • 方案2:模拟浏览器执行JS渲染后解析
    如果不想做接口抓包,可以使用Selenium、Playwright等模拟浏览器工具,加载页面后等待JS执行完成、表格渲染完毕,再提取页面元素。示例代码如下:

# 依赖安装命令:pip install selenium beautifulsoup4 webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
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

url = 'https://ekartlogistics.com/shipmenttrack/FMPP0944216480'
# 自动管理Chrome驱动,无需手动下载
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get(url)
# 等待表格加载完成,最长等待10秒
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "table"))
)
# 获取渲染后的完整页面源码
rendered_html = driver.page_source
soup = BeautifulSoup(rendered_html, 'html.parser')
# 按页面实际属性定位物流表格后提取数据
logistics_table = soup.find("table")
print(logistics_table.prettify())
# 关闭浏览器
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:00