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

如何抓取含鼠标悬停事件且多数元素无class的网站表格数据

问题分析与解决方案

你遇到的核心问题是:BeautifulSoup的find_all()返回的是Tag对象的列表,而非直接的文本内容。直接打印这个列表只会输出对象引用,自然拿不到纯数值;而把列表转成字符串后,字符串没有.text方法,所以也无法提取文本。

修正思路

  1. 针对每个Tag对象,单独调用.text属性提取内部文本,再用.strip()去除多余的换行、空格。
  2. 如果表格按行组织,建议按行遍历,确保每行的time和flag数据对应,避免数据错位。

修正后的代码

按行提取(推荐,保证数据对应)

lists = soup.find_all('table', class_= "report")

for table in lists:
    # 获取表格所有行
    rows = table.find_all('tr')
    for row in rows:
        # 在当前行中查找对应列的Tag
        date_tag = row.find('td', class_="time")
        flag_tag = row.find('td', class_="flag")
        
        # 提取文本并处理空白,避免Tag不存在时报错
        date = date_tag.text.strip() if date_tag else ""
        flag = flag_tag.text.strip() if flag_tag else ""
        
        info = [date, flag]
        print(info)

批量提取所有对应列

如果不需要按行配对,只是单纯收集所有time和flag的文本内容,可以用列表推导式:

lists = soup.find_all('table', class_= "report")

for table in lists:
    # 遍历所有time列Tag,提取文本
    dates = [tag.text.strip() for tag in table.find_all('td', class_="time")]
    # 遍历所有flag列Tag,提取文本
    flags = [tag.text.strip() for tag in table.find_all('td', class_="flag")]
    
    info = list(zip(dates, flags))  # 可选:将对应位置的date和flag配对
    print(info)

关键说明

  • 不要直接打印find_all()返回的列表,必须遍历列表中的每个Tag对象,调用.text获取文本。
  • .strip()用于去除文本前后的空白字符(换行、空格、制表符等),保证拿到干净的纯数值内容。
  • 加入if date_tag else ""的判断,是为了避免某些行没有对应列时抛出AttributeError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:45:41