У меня есть следующий HTML:BeautifulSoup метки диапазона идентификатор панды
</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
Я не понимаю, как это сделать.
EDIT:
Хорошо, что мне удалось понять что-то, что должно работать:
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_
значения, используя регулярное выражение, добавляя все результаты в список, а затем добавив это как столбец в dataframe.
Так просто создайте 5 из них, по одному для каждого поля. Если у кого-то есть лучшее решение, сообщите мне (это, вероятно, не очень эффективный способ сделать это). В противном случае это должно сделать трюк.
Почему ['read_html'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_html.html) не разрешает вашу проблему? – memoselyk