Saya sedang mengerjakan pengikisan teks menggunakan Python dari tautan; tautan turnamen

Ini kode saya untuk mendapatkan data tabular;

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from urllib.request import urlopen
from bs4 import BeautifulSoup

url = "http://www.hubertiming.com/results/2017GPTR10K"
html = urlopen(url)
soup = BeautifulSoup(html, 'lxml')
rows = soup.find_all('tr') ## find the table rows

Sekarang, tujuannya adalah untuk mendapatkan data sebagai kerangka data.

listnew=[]
for row in rows:
    row_td = row.find_all('td')
    str_cells = str(row_td)
    cleantext = BeautifulSoup(str_cells, "lxml").get_text() ##obtain text part
    listnew.append(cleantext) ## append to list

df = pd.DataFrame(listnew)
df.head(10)

Kemudian kita mendapatkan output berikut;

0   []
1   [Finishers:, 577]
2   [Male:, 414]
3   [Female:, 163]
4   []
5   [1, 814, \r\n\r\n JARED WIL...
6   [2, 573, \r\n\r\n NATHAN A ...
7   [3, 687, \r\n\r\n FRANCISCO...
8   [4, 623, \r\n\r\n PAUL MORR...
9   [5, 569, \r\n\r\n DEREK G O..

Saya tidak tahu mengapa ada karakter baris baru dan karakter carriage return; \r\n\r\n? bagaimana saya bisa menghapusnya dan mendapatkan kerangka data dalam format yang tepat? Terima kasih sebelumnya.

0
jay 5 Januari 2021, 01:01

2 jawaban

Jawaban Terbaik

Panda dapat mengurai tabel HTML, cobalah ini:

from urllib.request import urlopen

import pandas as pd
from bs4 import BeautifulSoup

url = "http://www.hubertiming.com/results/2017GPTR10K"
html = urlopen(url)
soup = BeautifulSoup(html, 'lxml')

table_1_html = soup.find('table', attrs={'id': 'individualResults'})

t_1 = pd.read_html(table_1_html.prettify())[0]

print(t_1)

Keluaran:

     Place  Bib                Name  ... Chip Pace Gun Time          Team
0        1  814        JARED WILSON  ...      5:51    36:24           NaN
1        2  573  NATHAN A SUSTERSIC  ...      5:55    36:45  INTEL TEAM F
2        3  687      FRANCISCO MAYA  ...      6:05    37:48           NaN
3        4  623         PAUL MORROW  ...      6:13    38:37           NaN
4        5  569     DEREK G OSBORNE  ...      6:20    39:24  INTEL TEAM F
..     ...  ...                 ...  ...       ...      ...           ...
572    573  273      RACHEL L VANEY  ...     15:51  1:38:34           NaN
573    574  467      ROHIT B DSOUZA  ...     15:53  1:40:32  INTEL TEAM I
574    575  471      CENITA D'SOUZA  ...     15:53  1:40:34           NaN
575    576  338      PRANAVI APPANA  ...     16:15  1:42:01           NaN
576    577  443    LIBBY B MITCHELL  ...     16:20  1:42:10           NaN

[577 rows x 10 columns]
1
AMC 4 Januari 2021, 22:31

Sepertinya beberapa sel dalam kode HTML memiliki banyak spasi awal dan akhir dan baris baru:

<td>

                    JARED WILSON

                </td>

Gunakan str.strip untuk menghapus semua awalan dan spasi putih, seperti ini: BeautifulSoup(str_cells, "lxml").get_text().strip().

1
yemre 4 Januari 2021, 22:22