#html #python-3.x #pandas #web-scraping #python-requests
#HTML #python-3.x #панды #очистка веб-страниц #python-запросы
Вопрос:
Я пытаюсь извлечь некоторую информацию из таблицы, которая отображается на веб-странице, но таблица неструктурирована, строка является заголовком, а столбец — содержимым, подобным этому: (Мои извинения за то, что не раскрыли веб-страницу)
<table class="table-detail">
<tbody>
<tr>
<td colspan="4" class="noborder">General Information
</td>
</tr>
<tr>
<th>Full name</th>
<td>
James Smith
</td>
<th>Year of birth</th>
<td>1992</td>
</tr>
<tr>
<th>Gender</th>
<td>Male</td>
</tr>
<tr>
<th>Place of birth</th>
<td>TTexas, USA</td>
<td>amp;nbsp;</td>
<td>amp;nbsp;</td>
</tr>
<tr>
<th>Address</th>
<td>Texas, USA</td>
<td>amp;nbsp;</td>
<td></td>
</tr>
На данный момент я могу извлечь таблицу с помощью этого скрипта:
import pandas as pd
import requests
url = "example.com"
r = requests.get(url)
df_list = pd.read_html(r.text)
df = df_list[0]
df.head()
df.to_csv('myfile.csv',encoding='utf-8-sig')
И таблица по существу выглядит следующим образом:
Тем не менее, я немного застрял в том, как добиться этого на Python. Кажется, я не могу разобраться в получении данных. Результат, который я хочу, выглядит следующим образом:
Любая помощь будет оценена. Заранее большое вам спасибо.
Ответ №1:
Вы можете использовать beautifulsoup
для синтаксического анализа HTML. Например:
import pandas as pd
from bs4 import BeautifulSoup
txt = '''<table class="table-detail">
<tbody>
<tr>
<td colspan="4" class="noborder">General Information
</td>
</tr>
<tr>
<th>Full name</th>
<td>
James Smith
</td>
<th>Year of birth</th>
<td>1992</td>
</tr>
<tr>
<th>Gender</th>
<td>Male</td>
</tr>
<tr>
<th>Place of birth</th>
<td>TTexas, USA</td>
<td>amp;nbsp;</td>
<td>amp;nbsp;</td>
</tr>
<tr>
<th>Address</th>
<td>Texas, USA</td>
<td>amp;nbsp;</td>
<td></td>
</tr>'''
soup = BeautifulSoup(txt, 'html.parser')
row = {}
for h in soup.select('th:has( td)'):
row[h.text] = h.find_next('td').get_text(strip=True)
df = pd.DataFrame([row])
print(df)
С принтами:
Full name Year of birth Gender Place of birth Address
0 James Smith 1992 Male TTexas, USA Texas, USA
Комментарии:
1. Я часами пытался разобраться в этом. Ваш код работает как шарм. Большое вам спасибо за вашу помощь! Очень признателен!