Atom выдает ошибку при запросе данных с веб-сайта

#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 .