如何用Python3-BeautifulSoup3从HTML表格指定行提取目标字符串?
用BeautifulSoup提取HTML表格特定行的目标文本
我最近在尝试用BeautifulSoup从HTML表格的行里提取特定字符串,想要拿到第二行和第三行里的SANDAL与SHORTS。我知道用正则或者字符串函数也能解决,但更想尽可能用BeautifulSoup的方法来实现,这样能更好地学习它的用法。
下面是我写的部分Python代码和对应的HTML结构:
我的Python代码片段
from bs4 import BeautifulSoup # 补充了必要的导入语句 soup = BeautifulSoup(page, 'html.parser') table = soup.find('table') row = table.find_next('tr') row = row.find_next('tr')
对应的HTML结构
<html> <body> <div id="body"> <div class="data"> <table id="products"> <tr><td>PRODUCT<td class="ole1">ID<td class="c1">TYPE<td class="ole1">WHEN<td class="ole4">ID<td class="ole4">ID</td></tr> <tr><td>SANDAL<td class="ole1">77313<td class="ole1">wear<td class="ole1">new<td class="ole4">id<td class="ole4">878717</td></tr> <tr><td>SHORTS<td class="ole1">77314<td class="ole1">wear<td class="ole1">new<td class="ole4">id<td class="ole4">878718</td></tr> </table> </div> </div> </body> </html>
解决方案:用BeautifulSoup定位目标行并提取文本
其实你已经找到了正确的方向,只需要再扩展几步就能拿到目标内容。这里有两种简洁的方法:
方法一:遍历所有行,跳过表头后提取
from bs4 import BeautifulSoup soup = BeautifulSoup(page, 'html.parser') table = soup.find('table', id='products') # 用id定位表格更精准 rows = table.find_all('tr') # 获取表格内所有行元素 # 跳过第一行表头,遍历第二、第三行 for row in rows[1:3]: # 列表索引从0开始,rows[0]是表头,rows[1]/rows[2]是目标行 first_td = row.find('td') # 获取每行的第一个<td>元素 print(first_td.get_text(strip=True)) # 提取文本并自动去除多余空白
方法二:基于你现有代码继续定位
如果你不想一次性获取所有行,可以在你当前的代码基础上继续向后查找行:
from bs4 import BeautifulSoup soup = BeautifulSoup(page, 'html.parser') table = soup.find('table') # 跳过表头行,直接定位到第二行 row = table.find_next('tr').find_next('tr') print(row.find('td').get_text(strip=True)) # 输出:SANDAL # 继续定位到第三行 row = row.find_next('tr') print(row.find('td').get_text(strip=True)) # 输出:SHORTS
关键说明
find_all('tr')会返回表格内所有行的列表,通过索引[1:3]可以快速筛选出第二、第三行。- 每行的第一个
<td>就是我们要的产品名称,find('td')可以直接定位到该行的第一个单元格。 get_text(strip=True)不仅能提取文本内容,还会自动去除文本前后的空白字符,在实际场景中能避免很多格式问题。
内容的提问来源于stack exchange,提问作者sandra
相关产品推荐
相关产品推荐

