0

Excelファイルのリンクから同じ方法でテーブルを取得しようとしています.以下のコードを使用してテーブルを取得しています.

#Getting particular table from the page and sending to excel file
page    = urllib2.urlopen('http://developer.android.com/about/dashboards/index.html').read()
soup    = BeautifulSoup(page)
a       = soup('div', {'class' : 'col-5'})[0]
with open('android version 2013_01_18.csv', 'wb') as csvfile:
    csvout = csv.writer(csvfile, delimiter=',')
    csvout.writerow(["Version","Codename","API", "Distribution"])
    for table in a.findAll('table'):
        print '#'
        print '# Table'
        print '# Fields: ' + ','.join([tr.text for tr in table.findAll('th')])
        for row in table.findAll('tr'):
            csvout.writerow([tr.text for tr in row.findAll('td')])

次のようにExcelで出力を取得しています:

1.6 Donut   4   0.20%
2.1 Eclair  7   2.40%
2.2 Froyo   8   9.00%
"2.3 - 2.3.2
"   Gingerbread 9   0.20%
"2.3.3 - 2.3.7
        "   10  47.40%  
3.1 Honeycomb   12  0.40%
3.2 13  1.10%   
4.0.3 - 4.0.4   Ice Cream Sandwich  15  29.10%
4.1 Jelly Bean  16  9.00%
4.2 17  1.20%   

ここで問題は、マージ セルの直後の行にあります。td カウントは 4 ではなく 3 であるため、マージ セルを作成するためにコードで rowspan=2 が使用されていることがわかりましたが、この情報を使用してデータを取得する方法を知りたいです。まったく同じです。以下は HTML 構造です

<tr>
 <td>
 <a href="/about/versions/android-2.3.html">2.3 - 2.3.2</a>
 </td>
 <td rowspan="2">Gingerbread</td>
 <td>9</td>
 <td>0.2%</td>
</tr>
<tr>
 <td>
 <a href="/about/versions/android-2.3.3.html">2.3.3 - 2.3.7 </a>
 </td>
 <td>10</td>
 <td>47.4%</td>
</tr>
4

1 に答える 1

1

Excel が読み取ることができる形式の中で、.csv は生成が最も簡単な形式の 1 つですが、最も強力でない形式の 1 つでもあります。セルの結合 (セルのデータ型の設定、複数のワークシートの作成) はサポートされていません。

Excel 2007 以降を使用している場合は、openpyxlを使用して .xlsx ファイルを作成できます。ワークシートを作成してデータを入力したら、元の HTML で rowspan=X を持つセルに対してワークシートでmerge_cellsを使用して、必要な効果を得ることができます。

古いバージョンの Excel を使用している場合は、xlwtを参照してください。

于 2013-02-22T06:44:40.640 に答える