2017-01-12 12 views
0

私は新しいウェブスクレイピングコーダーです。ウェブスクレイピングを学ぶと 'NoneType'オブジェクトが呼び出せません

私のコードはこれです:

from urllib2 import urlopen 
from bs4 import BeautifulSoup 
html=urlopen("http://www.pythonscraping.com/pages/warandpeace.html") 
bsObj=BeautifulSoup(html,"html.parser") 
namelist=bsObj.findall("span",{"class":"green"}) 
for name in namelist: 
    print(name.get_text()) 

とコンソールはこれです:私はあなたが単にタイプミスをしたと思います

Traceback (most recent call last): File "F:\Eclipseworkspace\PythonLearn1_12\src\Test1\__init__.py", line 5, in <module> 
    namelist=bsObj.findall("span",{"class":"green"}) TypeError: 'NoneType' object is not callable 
+0

(HTTPS://www.crummy .com/software/BeautifulSoup/bs4/doc /#searching-the-tree)ではなく、 'findall'です。 –

+0

行4の後に 'print bsObj'を追加すると、何が返されますか? – schaiba

+0

@MartijnPieters:または 'findAll'は大文字ですか? –

答えて

0

findAllは大文字Aであるかのことができます。 find_all(アンダースコア付き)を使用してください。これは実際にはbs4で使用する方法です。

このエラーが発生する理由は、BeautifulSoupオブジェクトが汎用属性(dir(..)の一部ではない属性)を、find -requestsとして処理するためです。クエリが見つからない場合は、指定されていないクエリされた属性ごとにNoneを返します。

>>> repr(bsObj.findall) 
'None' 

ので、今はNoneオブジェクト上(bsObj.findall(..))を呼び出し、それは動作しません。

+1

ありがとうございました。実際には、私は質問を送った後に自分の責任を認識しています。あなたの時間を無駄にしてすみません。 –

0
namelist=bsObj.find_all("span",{"class":"green"}) 

旧バージョン:findAll

新バージョン:find_all

間違ったバージョン:それは[アンダースコアで、find_all` `]綴られfindall

+1

ありがとうございました。申し訳ありません、それは本当にばかげた問題です。 –

関連する問題