#python #request #atom-editor
#python #запрос #atom-редактор
Вопрос:
Я запрашиваю html-данные из URL-адреса, используя модуль запроса в python.
Вот мой код
import requests
source = requests.get('http://coreyms.com')
print(source.text)
Когда я запускаю это в atom, это выдает мне ошибку;
File "/Users/isaacrichardson/Desktop/Python/Web Scraping/wiki.py", line 7, in <module>
print(source.text)
UnicodeEncodeError: 'ascii' codec can't encode character u'u2026' in position 34807: ordinal not in range(128)
Но когда я запускаю его в Treehouse workspaces, он работает нормально и показывает мне HTML-данные.
Что не так с atom или моим кодом?
Ответ №1:
Библиотека запросов установлена неправильно для atom или она для него недоступна. Правильная установка решит проблему.
Если это не сработает, я бы попробовал использовать модуль beautiful soup:
from bs4 import BeautifulSoup
doc = BeautifulSoup(source.text, "html.parser")
print(doc.text)
Комментарии:
1. Я установил с помощью pip и pip3, но он по-прежнему не работает, появляется та же ошибка.
2. Почему atom не поддерживает эту функцию
3. Хорошо, это действительно странно
4. Когда я использую .content, он отображает html, но когда я использую .text, он выдает эту ошибку, это похоже на ошибку с методом .text только в atom
Ответ №2:
requests
угадывает кодировку при обращении к .text
атрибуту объекта ответа. Если вы заранее знаете кодировку ответа, вам следует явно задать ее перед обращением к .text
атрибуту:
import requests
source = requests.get('http://coreyms.com')
source.encoding = 'utf-8' # or whatever the encoding is
print(source.text)
В качестве альтернативы, вы также можете работать с .content
, чтобы получить доступ к двоичному ответу conent и декодировать его самостоятельно.
Возможно, вы захотите проверить, действительно ли кодировки угадываются по-разному в ваших IDE, просто напечатав source.encoding
.