2017-07-02 6 views
1

私は絶対初心者です。私はBeautifulSoupを使用してウェブサイトを擦ってみます。私はHTMLを取得しますが、divsのクラスがcontent_classのものをすべて取得したいと考えています。Website BeautifulSoupを使ったスクレイピング:TypeError: 'NoneType'オブジェクトは呼び出し可能ではありません

import requests 
from BeautifulSoup import BeautifulSoup 

#Request the page and parse the HTML 
url = 'mywebsite' 
response = requests.get(url) 
html = response.content 

#Beautiful Soup 
soup = BeautifulSoup(html) 
soup.find_all('div', class_="content_class") 

しかしこれは動作しません:

は、ここに私の試みです。 私が手:私は間違って何をやっている

Traceback (most recent call last): File "scrape.py", line 11, in soup.find_all('div', class_="content_class") TypeError: 'NoneType' object is not callable

?あなたはBeautifulSoupにはメソッド「find_all」がないので、「findAllの」方法があり、このエラーを取得している

+0

2行目から最後の行に 'print(soup.find_all)'を置くと、何が印刷されますか? – unutbu

+0

だから私は 'soup = BeautifulSoup(html)'を行い、次に 'print(soup.find_all)'を印刷し、 'None'と表示しました。 –

答えて

3

を助けるべきであるあなたはBeautifulSoup version threeを使用しますが、以下のように見えるされていますBeautifulSoup version fourのドキュメントElement.find_all() methodは、最新のメジャーバージョン(Element.findAll() in version 3と呼ばれています)でのみ利用できます。

私は強くアップグレードすることを促す:

pip install beautifulsoup4 

from bs4 import BeautifulSoup 

バージョン3は、2012年に更新を受信を停止しました。今はひどく古くなっています。

+0

ありがとう、私はそれをやった!しかし、私は 'この警告を引き起こしたコードは、ファイルscrape.pyの10行目にあります。この警告を取り除くために、次のようになります変更コード: BeautifulSoup(YOUR_MARKUP})これまで : BeautifulSoup(YOUR_MARKUP、 "html.parser") MARKUP_TYPE = MARKUP_TYPE)) ' –

+0

@GeorgeWelder、警告の指示に従ってください。単に無視することもできます。 – ForceBru

+1

@GeorgeWelder:はい、BeautifulSoup 4が解析バックエンドを自動的に選択するのに使用されましたが、後でLXMLをインストールしたときに予期しない変更が発生しました。 'soup = BeautifulSoup(html、 'html.parser')'または 'soup = BeautifulSoup(html、 'lxml')'または 'soup = BeautifulSoup(html、 'html5lib')'を選択するように求められました。 。 –

1

、このコードは

soup.findAll('div', {'class': 'content_class'}) 
+0

ありがとうございます。私はそれを試みたが、エラーはなくなったが、空の配列、 '[]'が返ってくるが、 'content_class'クラスがドキュメント内に複数のdivに存在することは確かだ。 –

+1

あなたは本当にBeautifulSoupバージョン3をもう使用してはいけません。今では5年以上維持されていません。 –

関連する問題