我想从使用BeautifulSoup 4的Web刮取文本来解析它。将bs4处理后的文本输出到控制台时遇到问题。每当我碰到一个原本是HTML实体的角色,就像’我在控制台上得到垃圾字符。我相信bs4正在将这些实体正确地转换为unicode,因为如果我尝试使用另一种编码来打印文本,它会抱怨适当地缺少字符的unicode映射(如u'\ u2019)。我不确定为什么打印功能会对这些字符感到困惑。我试着改变字体,这会改变垃圾字符,并且在美国英语区域设置的Windows 7机器上。这里是我的代码供参考,任何帮助表示赞赏。提前致谢!BeautifulSoup 4将HTML实体转换为unicode,但使用打印时获取垃圾字符
#!/usr/bin/python
import json
import urllib2
import cookielib
import bs4
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
url = "http://api.nytimes.com/svc/search/v2/articlesearch.json?q=Tiguan\
&page=0&api-key=blah"
response = opener.open(url)
articles = response.read()
decoded = json.loads(articles)
totalpages = decoded['response']['meta']['hits']/10
for page in range(totalpages + 1):
if page>0:
url = "http://api.nytimes.com/svc/search/v2/articlesearch.json?\
q=Tiguan&page=" + str(page) + "&api-key=blah"
response = opener.open(url)
articles = response.read()
decoded = json.loads(articles)
for url in decoded['response']['docs']:
print url['web_url']
urlstring = url['web_url']
art = opener.open(urlstring)
soup = bs4.BeautifulSoup(art.read())
goodstuff = soup.findAll('nyt_text')
for tag in goodstuff:
print tag.prettify().encode("UTF")
相关:[Python,Unicode和Windows控制台](http://stackoverflow.com/q/5419/4279) – jfs
顺便说一句,你不是。 [奥巴马也得到了它](http://www.hanselman.com/blog/WhyTheAskObamaTweetWasGarbledOnScreenKnowYourUTF8UnicodeASCIIAndANSIDecodingMrPresident.aspx) – jfs
@JFSebastian:我已经好几次几乎把一个问题标记为一个问题,但它充满了答案看起来不错,不是。我们确实需要收集所有不同笨重的解决方法,并解释每个问题,并明确指出,除非您停止使用Windows或Python 2.x,否则这些笨重的解决方法就像您将要获得的一样好... – abarnert