2015-01-07 2 views
1

У меня есть следующий кодкак получить содержимое utf8 закодированный HTML

# __author__ = 'Vahagn' 
# -*- coding: utf-8 -*- 
import BeautifulSoup 
import requests 
    req = requests.get(u"http://knowledge.allbest.ru/chemistry/3c0a65635a3ad68b5c53b88421306c27.html") 
    s2 = BeautifulSoup.BeautifulSoup(req.content).find('p',{'class':'text'}).text 
    print(s2+'\n') 

Где Принг s2, утешать или файл writed

Õèìè÷åñêèå ñâîéñòâà. Ìèíåðàëû. Ìåäíûå ñïëàâû. Ìàðêè ìåäíûõ ñïëàâîâ. Ìåäíî-öèíêîâûå ñïëàâû. Ëàòóíè. Îëîâÿííûå áðîíçû. Àëþìèíèåâûå áðîíçû. Êðåìíèñòûå áðîíçû. Áåðèëëèåâûå áðîíçû. Ìåäü â ïðîìûøëåííîñòè. Ìåäü â æèçíè ðàñòåíèé è æèâîòíûõ. 

Но нужно

Химические свойства. Минералы. Медные сплавы. Марки медных сплавов. Медно-цинковые сплавы. Латуни. Оловянные бронзы. Алюминиевые бронзы. Кремнистые бронзы. Бериллиевые бронзы. Медь в промышленности. Медь в жизни растений и животных. 

Пожалуйста, помогите, как я могу это исправить, поскольку после этого текста (s2) напишите в mysql. Спасибо.

+0

Вы должны действительно использовать beautifulSoup4 –

+0

Он отлично работает для меня, это ваша система кодирования, которая является проблемой. Вы используете python 2 или 3? –

+0

Я использую python 2.7 –

ответ

1

Вы, вероятно, нужно декодировать:

s2 = BeautifulSoup(req.content.decode("windows-1251")).find('p',{'class':'text'}).tex‌​t 


In [72]: s2 = BeautifulSoup(req.content).find('p',{'class':'text'}).text 
In [73]: s2 
Out[73]: 'Õèìè÷åñêèå ñâîéñòâà. Ìèíåðàëû. Ìåäíûå ñïëàâû. Ìàðêè ìåäíûõ ñïëàâîâ. Ìåäíî-öèíêîâûå ñïëàâû. Ëàòóíè. Îëîâÿííûå áðîíçû. Àëþìèíèåâûå áðîíçû. Êðåìíèñòûå áðîíçû. Áåðèëëèåâûå áðîíçû. Ìåäü â ïðîìûøëåííîñòè. Ìåäü â æèçíè ðàñòåíèé è æèâîòíûõ.' 

In [74]: s2 = BeautifulSoup(req.content.decode("windows-1251")).find('p',{'class':'text'}).text  
In [75]: s2 
Out[75]: 'Химические свойства. Минералы. Медные сплавы. Марки медных сплавов. Медно-цинковые сплавы. Латуни. Оловянные бронзы. Алюминиевые бронзы. Кремнистые бронзы. Бериллиевые бронзы. Медь в промышленности. Медь в жизни растений и животных.' 
0

Рассматривая HTML и заголовки ответов, веб-сервер не отправляет вам кодировку данных. Это означает, что Python должен угадать. Я думаю, что он будет использовать вашу кодировку по умолчанию (независимо от используемой ОС).

Попытка преобразовать req.content в unicode с различными кодировками, пока вы не найдете тот, который производит правильный вывод:

content = unicode(req.content, encoding) 

Попробуйте utf-8 и iso-latin-1 в кодировках или некоторых распространенных кодировок, используемых в России.

+0

s2 = unicode (s2, encoding = 'utf-8') ТипError: декодирование Unicode не поддерживается –

+0

Кажется, что 's2' уже является своего рода строкой Unicode, но, вероятно, искажен , Попробуйте 's2 = s.encode ('iso-8859-1'). Decode ('utf-8')' Или посмотрите на модули 'request', если вы можете переопределить/указать кодировку содержимого. –

0

Попробуйте закодировать его перед его печатью. Как это:

import BeautifulSoup 
import requests 
    req = requests.get(u"http://knowledge.allbest.ru/chemistry/3c0a65635a3ad68b5c53b88421306c27.html") 
    s2 = BeautifulSoup.BeautifulSoup(req.content).find('p',{'class':'text'}).text 
    s2 = s2.encode('utf-8') 
    print(s2+'\n') 
+0

s2 = unicode (s2, encoding = 'utf-8') ТипError: декодирование Unicode не поддерживается –

+0

@VahagnVardanyan Попробуйте другой способ. Проверьте мое обновление. –

+0

Я пробую этот путь - UnicodeDecodeError: кодек ascii не может декодировать байт 0xc3 в позиции 0: порядковый номер не в диапазоне (128) –

Смежные вопросы