0

この HTML ページhttp://gnats.netbsd.org/summary/year/2012-perf.htmlを分類する必要があります。大きなテーブルから上位の問題のリストを作成する必要があります。これは Python での私のコードです。アドバイスをいただければ本当に助かります。

    import urllib.request
from bs4 import BeautifulSoup

# overall input
inputpage = urllib.request.urlopen("http://gnats.netbsd.org/summary/year/2012-perf.html")
page = inputpage.read()
soup = BeautifulSoup(page)

# checking tables
table = soup.findAll('table')
rows = soup.findAll('tr')
colomns = soup.findAll('td')

# inputing the lists
name = []
first = []
second = []
sum = []

# the main part
for tr in rows:
    if (tr==1):
        element = tr.split("<td>")
        name.append(element)
    elif (tr==2):
        element = tr.split("<td>")
        first.append(element)
    elif (tr==3):
        element = tr.split("<td>")
        second.append(element)


# combining the open and closed issue lists
length = len(first)
for i in range(length):
    sum = first[i] + second [i]

# printing the lists
length = len(sum)
for i in range(length):
    print (name[i] + '|' + sum[i])
4

1 に答える 1

0

BeautifulSoup子ノードなどにアクセスするための優れたメソッドがいくつかあります。たとえば、 を使用できますtables = soup.findAll('table')。投稿したリンクの 2 番目のテーブル (tables[1]) のデータを結合すると仮定すると、次のようなことができます。

names = []
cdict = {0:[], 1:[]} # dictionary of "td positions to contents"

tables = soup.findAll('table')
for tt in tables[1].find_all('tr')[1:]: # skip first <tr> since it is the header
    names.append(tt.find_all('th')[0]) # 1st column is a th with the name
    for k, v in cdict.items():
        # append the <td>text</td> of column k to the corresponding list
        v.append(tt.find_all('td')[k].text)

したがって、最終的には、列の辞書 -> リストになり、各リストに td テキスト要素が含まれます (辞書を使用する主な理由は、列 1、2 および列から要素を取得する場合があるためです)。 4、この場合、cdict の内容を変更するだけで済みます)。

合計を作成するには、次のようなことができます。

for i in xrange(len(names)):
    print names[i], int(cdict[0][i]) + int(cdict[1][i])

各要素のメソッドを見ると、タスクを簡単にするために使用できる非常に優れた機能がいくつかあることがわかります。

于 2012-11-26T23:13:15.810 に答える