3

我正在尝试登录 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 soup 并没有遇到这个问题。哎呀,即使在 twitter 的其他一些页面上,上面的代码也可以正常工作。我尝试打印prettify(),但它不起作用。它给了我以下错误:

UnicodeEncodeError:“ascii”编解码器无法在位置 6972 编码字符 u'\xb7':序数不在范围内(128)

我做了一些google-fu,我发现这与编码有关,所以我将我的代码调整为:

soup.prettify().encode('UTF-8')

这在大多数情况下都有效。我的意思是,它至少可以打印所有内容。但这些数据似乎都没有像往常一样在“汤”的实例中。例如,我无法访问soup.head,不是soup.bodySoup.find('foo')什么都不做,以及普通的旧,soup.b. 如果我打印soup.head它返回的类型NoneType,那么我会很困惑!

这里发生了什么?

编辑:什么..?为什么这被否决了?: (

4

1 回答 1

2

这是Beautiful Soup 的 html5lib 树构建器中的一个错误。我已经提交了一个修复,它将在下一个版本中发布。同时,我建议您告诉 Beautiful Soup使用 lxml 而不是 html5lib 来解析标记

于 2012-08-21T13:28:12.263 回答