2017-01-29 9 views
3

Я пытаюсь получить BeautifulSoup работы с URL, как показано в следующем:BeautifulSoup HTTPResponse не имеет атрибута закодировать

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
html = urlopen("http://proxies.org") 
soup = BeautifulSoup(html.encode("utf-8"), "html.parser") 
print(soup.find_all('a')) 

Однако я получаю ошибку:

File "c:\Python3\ProxyList.py", line 3, in <module> 
    html = urlopen("http://proxies.org").encode("utf-8") 
AttributeError: 'HTTPResponse' object has no attribute 'encode' 

Любая идея, почему ? Это может быть связано с функцией urlopen? Зачем нужен utf-8?

Там ясно, как представляется, некоторые различия с Python 3 и BeautifulSoup4, о примерах, которые даны (которые кажутся устаревшими или неправильно сейчас) ...

+0

Это закончилось тем, что решение, которое было необходимо - http://stackoverflow.com/questions/32382686/unicodeencodeerror-charmap-codec-cant-encode-character-u2010-character-m –

ответ

0

Это не работает, потому что urlopen возвращает HTTPResponse объект, и вы рассматривали это как прямой HTML. Вы должны приковать .read() метод на ответ для того, чтобы получить HTML:

response = urlopen("http://proxies.org") 
html = response.read() 
soup = BeautifulSoup(html.decode("utf-8"), "html.parser") 
print (soup.find_all('a')) 

вероятно Вы также хотите использовать html.decode("utf-8"), а не html.encode("utf-8").

+0

Привет, Джош, это все еще не работает для меня, я использую точно такой же код, как и вы и его даете мне «карты персонажей с ошибкой » –

0

Проверьте этот.

soup = BeautifulSoup(html.read().encode('utf-8'),"html.parser") 
0
from urllib.request import urlopen 
from bs4 import BeautifulSoup 
html = urlopen("http://proxies.org") 
soup = BeautifulSoup(html, "html.parser") 
print(soup.find_all('a')) 
  1. Во-первых, urlopen возвратит файл-подобный объект
  2. BeautifulSoup может принимать файл-подобный объект и декодировать его автоматически, вы не должны беспокоиться об этом.

Document:

Чтобы разобрать документ, передать его в конструктор BeautifulSoup. Вы можете передать строку или открытой дескриптором:

from bs4 import BeautifulSoup 

soup = BeautifulSoup(open("index.html")) 

soup = BeautifulSoup("<html>data</html>") 

Во-первых, документ преобразуется в Unicode и HTML сущности преобразуются в символы Unicode