如何使用BeautifulSoup提取日期及后续两个data_rec_v值?
解决方案
要实现你的需求,可通过以下步骤用BeautifulSoup处理HTML:
- 定位日期单元格:找到每个
<tr>中第一个class为date_rec的<td>,提取其中的日期文本。 - 提取后续两个单元格的数据:从日期单元格开始,获取紧接着的两个
date_rec类<td>,再从每个内部的inside_table中提取data_rec_v类<td>的文本。
代码示例
from bs4 import BeautifulSoup # 假设你的HTML内容存储在html变量中 html = """ <tr><td class='date_rec'>2/27/2023</td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>0.03</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>0.43</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>143</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>7.4</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>49.1</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>35.8</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>41.2</td><td class='data_rec_f'>Y</td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>93</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>65</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>84</td><td class='data_rec_f'>Y</td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>36.9</td><td class='data_rec_f'>Y</td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>7.1</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>170.2</td><td class='data_rec_f'> </td></tr></table></td> <td class='date_rec'><table class='inside_table'><tr><td class='data_rec_v'>44.5</td><td class='data_rec_f'>Y</td></tr></table></td> </tr> """ soup = BeautifulSoup(html, 'html.parser') # 遍历所有行 for tr in soup.find_all('tr'): # 获取当前行中所有class为date_rec的td date_rec_tds = tr.find_all('td', class_='date_rec') if not date_rec_tds: continue # 提取日期(第一个date_rec td的文本) date = date_rec_tds[0].get_text(strip=True) # 提取接下来两个td中的data_rec_v值 values = [] for td in date_rec_tds[1:3]: # 取第2、3个date_rec td data_v = td.find('td', class_='data_rec_v').get_text(strip=True) values.append(data_v) # 组合结果 result = [date] + values print(result) # 输出: ['2/27/2023', '0.03', '0.43']
关键说明
find_all('td', class_='date_rec'):一次性获取当前行中所有date_rec类的单元格,方便后续通过索引快速定位目标元素。date_rec_tds[1:3]:通过切片直接获取日期单元格之后的两个目标单元格,避免逐个定位的繁琐。get_text(strip=True):提取文本时自动去除多余空格,保证结果整洁。
内容的提问来源于stack exchange,提问作者dwburger
相关产品推荐
相关产品推荐

