1

BeautifulSoupと私はの結果を認識していませんbr.response().read()。BeautifulSoupをインポートしました

#snippet:
# Select the first (index zero) form
br.select_form(nr=0)
br.form.set_all_readonly(False)
br['__EVENTTARGET'] = list_of_dates[0]
br['__EVENTARGUMENT'] = 'calMain'
br['__VIEWSTATE'] = viewstate
br['__EVENTVALIDATION'] = eventvalidation

response = br.submit()
print br.response().read() #*#this prints the html I'm expecting*

soup = BeautifulSoup(br.response().read()) #*#but this throws 
#TypeError: 'module' object is not callable.  
#Yet if I call soup = BeautifulSoup("http://page.com"), it's cool.*

selecttable = soup.find('table',{'id':"tblItems"})
#/snippet

... 等々

だから私は間違った種類の「オブジェクト」を持っているのですが、BeautifulSoupはどのような「オブジェクト」を望んでいますか?

4

4 に答える 4

7

使用する

from BeautifulSoup import BeautifulSoup

それ以外の

import BeautifulSoup

そうでなければ、あなたは正しいことをしていると思います!

于 2012-06-09T20:08:07.977 に答える
1

あなたが書いた:

response = br.submit()
print br.response().read() #*#this prints the html I'm expecting*

soup = BeautifulSoup(br.response().read())

試してみませんか:

response = br.submit()
soup = BeautifulSoup(response.read())

mechanize.read()br.response()使用してきた私の歴史の中で、私は常にresponse()変数に保存し、.read()そこから呼び出してきました。うまくいくかどうかはわかりませんし、うまくいく理由もよくわかりませんが、試してみprint br.response().read()てください。

あるいは、BeautifulSoup の HTML パーサーは、機械化されたものを気に入らない場合があります。別のパーサーを使用してみてください。

于 2012-06-09T21:15:43.993 に答える
0

インポートが次のようになっていることを確認してください。

from BeautifulSoup import BeautifulSoup

またはBeautifulSoup4の場合

from bs4 import BeautifulSoup
于 2012-06-09T20:08:47.913 に答える
0

オブジェクトを一度だけ読み取ってから、結果を保存しようとしましたか。

例えば:

raw = br.response().read()

soup = BeautifulSoup(raw)

ファイル オブジェクトを使用すると、それらを一度読み取ってから、もう一度読み取るために再度開く必要があります。2回読んでいるようです。他にすべきことは、読み取りの前後に br.response の型シグネチャを出力することです。

デバッグを容易にするために、型シグネチャを印刷してみてください。

print type(response) # see the type of response from above
raw = br.response().read()
print type(raw)
print type(br.response().read()) # see what happens the second time :P

また、スタックトレースも投稿していただけると助かります。

于 2012-06-09T21:19:47.673 に答える