我有以下 html:
</tr><tr>
<td>
<span id="Grid_exdate_43">2/15/2005</span>
</td><td>Cash</td><td>
<span id="Grid_CashAmount_43">0.08</span>
</td><td>
<span id="Grid_DeclDate_43">--</span>
</td><td>
<span id="Grid_RecDate_43">2/17/2005</span>
</td><td>
<span id="Grid_PayDate_43">3/10/2005</span>
</td>
</tr><tr>
<td>
<span id="Grid_exdate_44">11/15/2004</span>
</td><td>Cash</td><td>
<span id="Grid_CashAmount_44">3.08</span>
</td><td>
<span id="Grid_DeclDate_44">--</span>
</td><td>
<span id="Grid_RecDate_44">11/17/2004</span>
</td><td>
<span id="Grid_PayDate_44">12/2/2004</span>
</td>
</tr><tr>
每个部分都有相同的5项,分别是:Grid_exdate
, Grid_CashAmount
, Grid_DeclDate
, Grid_RecDate
, Grid_PayDate
。每个部分的每个 id
后面都有一个整数,每个部分递增。在上面的示例中,我们有第 43 和 44 节。
我需要能够将每个部分保存为 Pandas 数据框中的一行。数据框如下:
Grid_exdate Grid_CashAmount Grid_DeclDate Grid_RecDate Grid_PayDate
2/15/2005 0.08 -- 2/17/2005 3/10/2005
11/15/2004 3.08 -- 11/17/2004 12/2/2004
我不知道该怎么做。
编辑:
好的,我已经想出了一些可行的办法:
def get_exdate(self, id):
return id and re.compile("Grid_exdate_").search(id)
df = pd.DataFrame()
exdate_list = []
for link in soup.find_all(id=self.get_exdate):
exdate_list.append(link.string)
df['Grid_exdate'] = exdate_list
所以上面的代码使用正则表达式获取所有 Grid_exdate_
值,将所有结果添加到列表中,然后将其作为列添加到数据框中。
我只创建了其中的 5 个,每个字段一个。如果有人有更好的解决方案,请告诉我(这可能不是一种非常有效的方法)。否则这应该可以解决问题。
最佳答案
感谢大家提供建议的解决方案。最后,我采用了以下似乎是最简单的解决方案:
def get_exdate(self, id):
return id and re.compile("Grid_exdate_").search(id)
df = pd.DataFrame()
exdate_list = []
for link in soup.find_all(id=self.get_exdate):
exdate_list.append(link.string)
df['Grid_exdate'] = exdate_list
这会使用 re.compile
在 html/soup 中搜索以 Grid_exdate_
开头的所有内容。然后将结果添加到数据框。因此,我刚刚为每个必填字段创建了一个 re.compile
搜索,并将它们全部添加到具有正确列标题的数据框中。
关于python - Beautifulsoup 跨度 id 标签到 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34082098/