2016-12-26 23 views
0

私は、このリンクから「スパン」タグに番号を取得しようとしている:取得番号

<tr><td>Modu</td><td><span class="comments">90</span></td></tr> 
<tr><td>Kenzie</td><td><span class="comments">88</span></td></tr> 
<tr><td>Hubert</td><td><span class="comments">87</span></td></tr> 

ここでコードがあります:http://python-data.dr-chuck.net/comments_42.html

データは次のようになります

import urllib 
from BeautifulSoup import * 

url = raw_input('Enter - ') 
html = urllib.urlopen(url).read() 

soup = BeautifulSoup(html) 

# Retrieve all of the anchor tags 
tags = soup('span') 


numbers = [number.contents[0] for number in tags] 
print numbers 

私はnumbersを印刷するとき、それはこのようなものが表示されます。

[u'97', u'97', u'90', u'90', u'88', u'87', u'87', u'80', u'79', u'79', u'78', u'76', u'76', u'72', u'72', u'66', u'66', u'65', u'65', u'64', u'61', u'61', u'59', u'58', u'57', u'57', u'54', u'51', u'49', u'47', u'40', u'38', u'37', u'36', u'36', u'32', u'25', u'24', u'22', u'21', u'19', u'18', u'18', u'14', u'12', u'12', u'9', u'7', u'3', u'2'] 

どうしてそんなものが得られますか?私の目的は、それらの文字列をuを使わずにキャストし、それらの合計を得ることです。

答えて

1

あなたのリスト項目を使用すると、以下のような文字列にリストアイテムを変換することができ、Unicodeのタイプのものである:

numbers = [str(number.contents[0]) for number in tags] 

あなたのリスト項目を要約すると、あなたは整数ではなく、文字列に変換する必要があります。

numbers = [int(number.contents[0]) for number in tags] 
s = sum(numbers) 

出力:

>>> my_list = [u'97', u'97', u'90', u'90', ...] 
>>> 
>>> [str(item) for item in my_list] 
['97', '97', '90', '90', ...] 
>>> 
>>> s = sum(int(item) for item in my_list) 
>>> s 
2553 
+2

あなたはエンコードの種類を通らずにユニコード( 'STRを()')をエンコードすることはありません。いずれかのフィールドにASCII以外の文字が含まれていると、大量のUnicodeEncodeError例外が発生します –

+0

@AlastairMcCormack私はあなたに同意します。この場合、入力は非ASCII文字以外の数字です。 – ettanany

0

あなたがリストを印刷しているので、あなたはそれを見ています。これによりPython repr()メソッドが呼び出され、リスト内のデータ型が分かります。

u''は、リストにUnicode文字列が含まれることを意味します。これについて今心配する必要はありません(詳細はHow to fix: "UnicodeDecodeError: 'ascii' codec can't decode byte"を参照してください)。

値を合計する必要があるため、Unicode文字列値を整数に変換するだけで済みます。

あなたはわずかで、あなたのコードを修正していることを達成することができます:

numbers = [int(number.contents[0]) for number in tags] 
関連する問題