如何使用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
相关产品推荐
相关产品推荐

