我正在尝试登录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 + Beautiful汤,并且没有遇到过这个问题。哎呀,即使在Twitter的其他一些页面上,上面的代码也能正常工作。我尝试打印prettify()
,但它不起作用。它给了我以下错误:
UnicodeEncodeError:'ascii'编解码器无法对字符u'\ xb7'进行编码 位置6972:序数不在范围内(128)
我做了一些google-fu,我发现这与编码有关,所以我将我的代码调整为:
soup.prettify().encode('UTF-8')
这在很大程度上起作用。我的意思是,它至少打印一切。但是这些数据似乎都不像通常那样“在”汤的情况下。例如,我无法访问soup.head
,而无法访问soup.body
。 Soup.find('foo')
除了普通的soup.b
之外什么都不做。如果我打印soup.head
的类型它会返回NoneType
,所以我很困惑!
这里发生了什么?
编辑:哇..?为什么这被贬低? :(答案 0 :(得分:2)
这是a bug in Beautiful Soup's html5lib tree builder。我已经提交了一个将在下一个版本中修复的修复程序。在此期间,我建议您告诉Beautiful Soup parse the markup using lxml instead of html5lib。