Я пытаюсь очистить текст из Интернета, используя BeautifulSoup 4, чтобы проанализировать его. Я столкнулся с проблемой при выводе обработанного bs4 текста на консоль. Всякий раз, когда я нажимаю на символ, который изначально был объектом HTML, например ', я получаю мусорные символы на консоли. Я считаю, что bs4 правильно преобразует эти объекты в юникод, потому что, если я попытаюсь использовать другую кодировку для вывода текста, он будет жаловаться на отсутствие соответствующего отображения юникода для символа (например, u'’.) Я не уверен, почему функция печати путается с этими символами. Я пробовал менять шрифты, что меняет символы мусора, и нахожусь на компьютере с Windows 7 с американо-английским языком. Вот мой код для справки, любая помощь приветствуется. Заранее спасибо!
#!/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")
PYTHONIOENCODING
, например, utf-8 для файлов, каналов иascii:xmlcharrefreplace
, чтобы избежать мусора в консоли. bugs.python.org/issue1602 ошеломляет (ссылка взята из моего комментария к этому вопросу). - person jfs   schedule 18.12.2013xmlcharrefreplace
не совсем удобочитаем/удобен для конечного пользователя. В любом случае, некоторые будущие версии Python будут использовать что-то вроде объектов консоли Windows из этой проблемы (но должным образом интегрированных с модулемio
) для вывода UTF-16 в Windows, после чего проблема исчезнет (за исключением людей с некоторыми старыми версиями). и специализированные Unix-системы, которые либо знают, что делают, либо им все равно). Но пока люди придерживаются Python 2.x, не имеет значения, что 3.5 решил проблему… - person abarnert   schedule 18.12.2013