【发布时间】:2016-03-09 00:25:08
【问题描述】:
我有以下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 个,每个字段一个。如果有人有更好的解决方案,请告诉我(这可能不是一种非常有效的方法)。否则这应该可以解决问题。
【问题讨论】:
-
为什么
read_html没有解决你的问题?
标签: python pandas beautifulsoup