2015-01-07 1 views
1

Код:Ошибка при печати Царапины веб-страницы через BS4

import requests 
import urllib 
from bs4 import BeautifulSoup 

page1 = urllib.request.urlopen("http://en.wikipedia.org/wiki/List_of_human_stampedes") 
soup = BeautifulSoup(page1) 
print(soup.get_text()) 
print(soup.prettify()) 

Ошибка:

Traceback (most recent call last): 
    File "C:\Users\sony\Desktop\Trash\Crawler Try\try2.py", line 9, in <module> 
    print(soup.get_text()) 
    File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode 
    return codecs.charmap_encode(input,self.errors,encoding_table)[0] 
UnicodeEncodeError: 'charmap' codec can't encode character '\u014d' in position 10487: character maps to <undefined> 

Я думаю, что проблема заключается в основном с пакетом urlib. Здесь я использую пакет urllib3. Они изменили синтаксис urlopen от 2 до 3 версии, что может быть причиной ошибки. Но, как говорится, я включил только последний синтаксис. Python версии 3.4

ответ

2

, так как вы импортируете requests вы можете использовать его вместо URLLIB так:

import requests 
from bs4 import BeautifulSoup 

page1 = requests.get("http://en.wikipedia.org/wiki/List_of_human_stampedes") 
soup = BeautifulSoup(page1.text) 
print(soup.get_text()) 
print(soup.prettify()) 

Ваша проблема заключается в том, что питон не может кодировать символы со страницы, которые вы выскабливание. Для получения дополнительной информации см. Здесь: https://stackoverflow.com/a/16347188/2638310

Поскольку страница wikipedia находится в UTF-8, кажется, что BeautifulSoup неправильно исправит кодировку. Попробуйте пропускание from_encoding аргумента в коде следующим образом:

soup = BeautifulSoup(page1.text, from_encoding="UTF-8") 

Более подробной информации о кодировках в BeautifulSoup посмотрите здесь: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#encodings

+0

дает этот файл ошибки "C: \ Python34 \ Lib \ кодировок \ cp1252.py", строка 19, в закодировать возврата кодеков .charmap_encode (вход, self.errors, encoding_table) [0] UnicodeEncodeError: кодек 'charmap' не может кодировать символ '\ u014d' в позиции 10487: карты символов в

+0

@AbhishekBhatia см. обновленный ответ. –

0

Я использую python2.7, так что я не request метода внутри модуль urllib.

#!/usr/bin/python3 
# coding: utf-8 

import requests 
from bs4 import BeautifulSoup 

URL = "http://en.wikipedia.org/wiki/List_of_human_stampedes" 
soup = BeautifulSoup(requests.get(URL).text) 
print(soup.get_text()) 
print(soup.prettify()) 

https://www.python.org/dev/peps/pep-0263/

0

поставить эти печатные линии внутри Try Выгода блока.

Так что, если есть illegle chracter найден, то вы не получите ошибку

try: 
    print(soup.get_text()) 
    print(soup.prettify()) 
except Exception: 

    print(str(soup.get_text().encode("utf-8"))) 
    print(str(soup.prettify().encode("utf-8)))