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

Python数据爬取异常:目标网站表格返回空值求助

解决TFDA药品注册页面表格爬取为空的问题

看起来你遇到的核心问题是目标页面的表格是通过JavaScript动态渲染的——直接用requests获取的静态HTML里根本没有这个表格元素,所以BeautifulSoup自然找不到,返回空字符串。

我帮你分析了这个页面,下面给你两种可行的解决方案:


方法1:用Selenium模拟浏览器渲染页面

Selenium可以模拟真实浏览器加载页面、执行所有JavaScript,这样就能拿到完整的渲染后页面,再用BeautifulSoup解析表格。

步骤:

  1. 先安装Selenium和对应浏览器的驱动(比如ChromeDriver,要和你的Chrome版本匹配)
  2. 替换你的代码为以下版本:
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

# 配置无头模式(不打开浏览器窗口,后台运行)
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")

# 初始化浏览器
driver = webdriver.Chrome(options=chrome_options)
driver.get("http://tfda.go.tz/portal/registered-products/registered-drug-products-1")

# 等待页面加载(表格是动态加载的,给3秒确保渲染完成)
time.sleep(3)

# 获取渲染后的页面源码
page_source = driver.page_source
driver.quit()

# 解析页面
soup = BeautifulSoup(page_source, 'html.parser')
table = soup.find("table", {"class": "table table-stripped table_productDrugs"})

# 打印表格内容(也可以进一步解析行和列提取数据)
print(table.prettify())

方法2:直接抓取后台API接口(更高效)

我通过浏览器开发者工具抓包发现,这个页面的表格数据是通过AJAX请求从后台接口获取的,直接请求接口能拿到包含表格的HTML片段,不用处理页面渲染,效率更高。

步骤:

  1. 接口地址格式为http://tfda.go.tz/portal/registered-products/registered-drug-products-1?page=页码,修改page参数即可切换分页
  2. 直接请求接口并解析返回内容

代码示例:

import requests
from bs4 import BeautifulSoup

# 请求第1页数据,爬多页可循环修改page参数
url = "http://tfda.go.tz/portal/registered-products/registered-drug-products-1?page=1"
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"
}
response = requests.get(url, headers=headers)

# 解析返回的HTML片段
soup = BeautifulSoup(response.text, 'html.parser')
table = soup.find("table", {"class": "table table-stripped table_productDrugs"})

# 打印表格或提取具体数据
print(table.prettify())

额外提示:

  • 你之前的sys.stdout编码设置可能导致输出乱码,建议换成UTF-8编码:
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
    
  • 如果要爬取多页数据,只需循环修改page参数,直到返回的表格为空或无新数据即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:06