2016-11-10 13 views
0

私は、HTMLから数字をスクラップするコードを作成しようとしています。解決できません:TypeError:期待される文字列またはバッファ

"expected string or buffer"というエラーが発生します。

別の質問を通じて私の検索をしている間、私はいくつかのソリューションを読んだが、私は" ''.join(some_list)"をしようとしたとき、私は別のエラーを取得しています:

"sequence item 0: expected string, Tag found"

はその1を検索しようとしましたが、.getを使用してのようないくつかの解決策を見ましたre.findallではなく、エラーが表示されたままになります。

コード:

import urllib 
from BeautifulSoup import * 
url = raw_input('Enter the URL:') 
stri = urllib.urlopen(url).read() 
soup = BeautifulSoup(stri) 

#retrieve of the span tags 

spans = ''.join(soup('span')) 
numlist = list() 
for tag in spans: 
    num = int(re.findall('[0-9]+', tag)) 
    numlist.append(num) 
print(numlist) 

私は、エラーのこれらのタイプのいくつかのソリューションを見たが、それを解決するように見えることはできません。

私には何が欠けていますか? 、

が、私は別の記事を見て、「errnoが110​​04]のgetaddrinfoは失敗しました」が、それを解決することができませんでした:

私はtag.textを追加し、エラーが今私が取得しています、別のものに変更されました私は問題があるだ場所を確認するために線でコード行を走った、と私は私が元のコードで4番目の文を実行しているときに表示されることがわかった:

html = urllib.urlopen(url).read() 

助けてください?

+2

エラーメッセージをデバッグする最初のステップを使用して、行番号を見つけることです。行番号が不足しています。 – tcooc

+0

Pythonは "期待される文字列またはバッファ"というだけではなく、問題のある行を示すスタックトレースを書きました。私たちはそれを見ることができるようにスタックトレースを投稿できますか?それ以外の場合は、問題がどこにあるかを推測する必要があります。 – tdelaney

+0

デバッグのヒント: 'print'はあなたの友人です。あなたのコードに 'print 'badness'を追加し、(スープ( 'span')[0])'をタイプし、 'badness 'を得ました。これは参加できるものではありません。 – tdelaney

答えて

1

tagは、文字列だけでなく、多くの情報を含むTagオブジェクトです。あなたが任意のマークアップなしタグ内のテキストをしたい場合は、tag.text、例えば:

spans = ''.join(tag.text for tag in soup('span')) 
# now `for tag in spans:` makes no sense because spans is a string 

または

spans = soup('span') 
for tag in spans: 
    num = len(re.findall('[0-9]+', tag.text)) # note len, not int 
+0

整数にキャストされた型は 're.findall'がリストを返すので動作しません –

+0

@MosesKoledoyeありがとう、私は' int'を見ずに貼り付けてコピーします。 –

+0

@AlexHallありがとう、私はコードを変更し、別のエラーを持って、私は最初のエラー質問に詳細を追加しました。 –

関連する問題