Веб-очистка Python от неструктурированной таблицы

#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. Я часами пытался разобраться в этом. Ваш код работает как шарм. Большое вам спасибо за вашу помощь! Очень признателен!