2016-06-26 2 views
-1

Как удалить (или закодировать) специальные символы со страницы, указанной ниже?Очистить специальные символы в Python Beautiful Soup

import urllib2 
from bs4 import BeautifulSoup 
import re 

link = "https://www.sec.gov/Archives/edgar/data/4281/000119312513062916/R2.htm" 

request_headers = {"Accept-Language": "en-US,en;q=0.5", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Referer": "http://google.com", "Connection": "keep-alive"} 
request = urllib2.Request(link, headers=request_headers) 
html = urllib2.urlopen(request).read() 
soup = BeautifulSoup(html, "html.parser") 
soup = soup.encode('utf-8', 'ignore') 
print(soup) 
+0

В чем проблема? Почему вы кодируете результат перед его печатью? Stdout уже будет кодировать ваш язык. –

+1

Я предполагаю, что проблема связана с тем, что вы получаете ошибку, анализируя html? Charset = us-ascii, поэтому нет необходимости кодировать что-либо, проблема в том, что html сломан. Вам понадобится другой синтаксический анализатор, html5lib и lxml смогут разобрать его, но с сломанным html, который знает, насколько хорошо. –

ответ

-1

Юникодные объекты могут быть напечатаны только в том случае, если они могут быть преобразованы в ASCII. Если он не может быть закодирован в ASCII, вы получите эту ошибку. Вероятно, вы хотите явно закодировать его, а затем распечатать полученный суп:

import requests 
from bs4 import BeautifulSoup 
import re 

link = "https://www.sec.gov/Archives/edgar/data/4281/000119312513062916/R2.htm" 

request_headers = {"Accept-Language": "en-US,en;q=0.5", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Referer": "http://google.com", "Connection": "keep-alive"} 
reuest = requests.get(link, headers=request_headers) 
soup = BeautifulSoup(reuest.text,"lxml") 
print(soup.encode('utf-8')) 
+0

Вы полностью изменили код OP без объяснений и все же сохранили тот же ошибочный механизм кодирования. OP хочет использовать «html.parser» для BS, но вы спокойно меняли местами, если для 'lxml'. Кроме того, вы представили библиотеку запросов, но здесь это не обязательно. Вы также ошибаетесь в отношении объектов Unicode - поток stdout будет пытаться кодировать кодировку оболочки. Редко это кодирование ASCII. Поэтому вы должны позволить stdout кодировать по мере необходимости и передавать его 'str' not' bytes' –