最近のツイートをスクレイピングするために、Twitter にログインしようとしています。次のコードがあります。
import mechanize
from bs4 import BeautifulSoup
import time
import html5lib
twitter = 'https://mobile.twitter.com/session/new'
br = mechanize.Browser()
response1 = br.open(twitter)
br.select_form(nr=0)
br['username'] = 'MYUSERNAME'
br['password'] = 'MYPASSWORD'
br.submit()
req = br.click_link(text='Me[IMG]')
response = br.open(req)
soup = BeautifulSoup(response.read())
soup.prettify() #does nothing at all
soup.head #also does nothing at all
過去数日間、複数のサイトでMechanize + Beautifulsoup を使用してきましたが、この問題は発生していません。Twitter の他のページでも、上記のコードは問題なく動作します。印刷prettify()
してみましたが、うまくいきません。次のエラーが表示されます。
UnicodeEncodeError: 'ascii' コーデックは位置 6972 の文字 u'\xb7' をエンコードできません: 序数が範囲外です(128)
私はいくつかのgoogle-fuを実行しましたが、これはエンコーディングに関連していることがわかったので、コードを次のように調整します:
soup.prettify().encode('UTF-8')
そして、これはほとんどの場合機能します。つまり、少なくともすべてを印刷します。しかし、そのデータはどれも、通常のスープのインスタンスの「中に」あるようには見えません。たとえば、 ではなく にアクセスできませsoup.head
んsoup.body
。Soup.find('foo')
普通の古いものと同様に、何もしませんsoup.b
。soup.head
returnの型を出力するとNoneType
、いろいろと混乱してしまいます。
何が起きてる?
編集:何..?なぜこれが反対票を投じられているのですか?: (