html_read: данные только для чтения, а не форма таблицы [строки A столбцов B] (Python) - PullRequest
0 голосов
/ 28 февраля 2020

Я собираю данные с веб-сайта, используя pd.read_ html в al oop, используя Python 3.7, и пытаюсь экспортировать их.

Соответствующая часть строки html:

html_source =

<div class="reiterZwischenzeile">
    &nbsp;
</div>
<table class="tabelleOhneWidth" width="100%" cellspacing="0px">
    <colgroup>
        <col class="left" width="300px" valign="middle">
        <col class="left" width="80px" valign="middle">
        <col class="left" width="80px" valign="middle">
        <col class="left" width="80px" valign="middle">
        <col class="left" width="80px" valign="middle">
        <col class="left" width="20px" valign="middle">
        <col class="left" width="80px" valign="middle">
        <col class="left" width="80px" valign="middle">
        <col class="left" width="20px" valign="middle">
        <col class="left" width="20px" valign="middle">
    </colgroup>
    <tbody><tr>
        <td class="tabelleKopfUo left" colspan="2" rowspan="2">
            Teilarbeit
        </td>
        <td class="tabelleKopfUo center" rowspan="2">
            Arbeitszeit-<br>bedarf
        </td>
        <td class="tabelleKopfUo center" rowspan="2">
            Flächen-<br>leistung
        </td>
        <td class="tabelleKopfUo center" colspan="5">
            Maschinenkosten
        </td>
        <td class="tabelleKopfUo center" rowspan="2">
            Diesel-<br>bedarf
        </td>
    </tr>
    <tr>
        <td class="tabelleKopfOoUo center">
            Abschreibung
        </td>
        <td class="tabelleKopfOoUo center">
            Zinskosten
        </td>
        <td class="tabelleKopfOoUo center">
            Sonstiges&nbsp;<img src="images/info_white_10.png" border="none"> 
        </td>
        <td class="tabelleKopfOoUo center">
            Reparaturen
        </td>
        <td class="tabelleKopfOoUo center">
            Betriebsstoffe
        </td>
    </tr>
    <tr>
        <td class="tabelleKopfOo center" colspan="2"></td>
        <td class="tabelleKopfOo center">
            Akh/ha
        </td>
        <td class="tabelleKopfOo center">
            ha/h
        </td>
        <td class="tabelleKopfOo center" colspan="5">
            €/ha
        </td>
        <td class="tabelleKopfOo center" colspan="5">
            l/ha
        </td>
    </tr>

        <tr>
            <td class="tabelleEbene2  left">
                2.000 l, Aufbaupflanzenschutzspritze; 138 kW
            </td>
            <td class="tabelleEbene2  right">
                Feldarbeit
            </td>
            <td class="tabelleEbene2  right">
                0.11
            </td>
            <td class="tabelleEbene2  right">
                9.09
            </td>
            <td class="tabelleEbene2  right">
                3.72
            </td>
            <td class="tabelleEbene2  right">
                0.91
            </td>
            <td class="tabelleEbene2  right">
                0.24
            </td>
            <td class="tabelleEbene2  right">
                1.59
            </td>
            <td class="tabelleEbene2  right">
                0.68
            </td>
            <td class="tabelleEbene2  right">
                0.90
            </td>
        </tr>



</tbody></table>




Затем я читаю таблицы html на каждой итерации следующим образом:


        df_list = pd.read_html(html_source, skiprows = [0,1,2])


Печать df_list дает мне это (индексирование df_list [0] тоже не помогает):

print(df_list)

[                                             0           1     2   ...  11  12  13
0  2.000 l, Aufbaupflanzenschutzspritze; 138 kW  Feldarbeit  0.11  ...            

[1 rows x 14 columns]]

Я пробовал то же самое с простым html кодом, подобным этому:

<html>

<body>


<table><tr></tr></table>
<table><tr></tr></table>


blablabal
blabalalb
slkjflsjbs
sjflsbsb


Table1
<table border=1>
<tr>
<td>Test1</td><td>3</td><td>6</td><td>8.8</td><td>Test</td>
</tr>
<tr>
</tr>
<td>4</td><td>7</td><td>8</td><td>88</td><td>Test</td>
<td>74</td><td>77</td><td>78</td><td>88</td><td>Test</td><td>74</td><td>77</td><td>78</td><td>88</td><td>Test</td>
</table>


</body>

<html>


htmlname = r"example.html"
html = open(htmlname, 'r')

source_code = html.read()
#print(source_code)
tables = pd.read_html(source_code, skiprows=[1])

print(tables)

[       0  1  2    3     4
0  Test1  3  6  8.8  Test]
>>>

Почему я получаю это описание формы, когда читаю с сайта, и как мне от него избавиться?

1 Ответ

1 голос
/ 28 февраля 2020

попробуйте использовать эту опцию: -

pd.options.display.show_dimensions = False
df_list = pd.read_html(html_source,skiprows=3)
print(df_list)

Также просто, чтобы ответить, почему он показывает размерность для первого html источника, это то, что в pandas более новых версиях измерения не показываются для небольших кадров данных где они подходят консоли. Они показываются только тогда, когда вывод данных кадра большой. Пример: - В вашем случае

df = pd.concat(df_list)
df1 = df[df.columns[range(4)]]
df1

Если вы выберете только 4 столбца из df_list, он не покажет размерность из-за меньшего количества столбцов 4 по сравнению с 14.

...