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

如何使用pandas.read_html提取图片的img alt文本?

提取img的alt属性替代原文本的解决方案

pandas.read_html默认只会抓取标签内的可见文本节点,不会自动提取img的alt属性值,直接调用的话拿不到目标内容。可以用以下两种方法解决:

方法一:预处理HTML,把img替换成alt文本

适合HTML结构简单的场景,先将img标签替换为对应的alt文本,再交给pandas解析:

import pandas as pd
import re

# 假设html_content是你爬取到的原始HTML字符串
html_content = '''<td>
<div>...
<a href="/index.php/WF..." title="WF"><img alt="WFrag" src="/images/thumb/WF.png" ></a>
</div>
</td>'''

# 用正则把<img alt="xxx">替换为xxx
processed_html = re.sub(r'<img alt="([^"]+)"[^>]*>', r'\1', html_content)

# 正常调用read_html解析
df = pd.read_html(processed_html)[0]

方法二:用BeautifulSoup先解析提取alt,再构建DataFrame

如果HTML结构复杂,正则容易出错,就用BeautifulSoup先遍历提取目标内容,再转成DataFrame,更稳健:

import pandas as pd
from bs4 import BeautifulSoup

html_content = '''<table>
<tr>
<td>
<div>
<a href="/index.php/WF..." title="WF"><img alt="WFrag" src="/images/thumb/WF.png" ></a>
</div>
</td>
<td>普通文本</td>
</tr>
</table>'''

soup = BeautifulSoup(html_content, 'html.parser')
table = soup.find('table')

# 逐行提取数据
rows = []
for tr in table.find_all('tr'):
    row_data = []
    for td in tr.find_all('td'):
        # 查找当前td内的img标签
        img_tag = td.find('img')
        if img_tag and img_tag.get('alt'):
            row_data.append(img_tag['alt'])
        else:
            # 没有img则提取文本,自动去除多余空格
            row_data.append(td.get_text(strip=True))
    rows.append(row_data)

# 转换成DataFrame
df = pd.DataFrame(rows)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:25:44