Я очищаю веб-страницу, содержащую HTML, который выглядит следующим образом в браузере
<td>LGG® MAX multispecies probiotic consisting of four bacterial trains</td>
<td>LGG® MAX helps to reduce gastro-intestinal discomfort</td>
Принимая только LGG®, в первом случае он равен LGG®
Во втором случае записывается ®как ®
в исходном коде.
Я использую Python 2.7, mechanize и BeautifulSoup.
Моя сложность заключается в том, что ®
поднимается с помощью механизации, переносится и в конечном счетераспечатан или записан в файл.
Есть много других специальных символов.Некоторые из них «конвертируются» на выходе, а ® преобразуются в путаницу.
Веб-страница объявляется как UTF-8, и единственная ссылка, которую я делаю на кодирование, - это когда я открываю свой файл out.Я объявил UTF-8.Если я не пишу в файл бомбы о других персонажах.
Я работаю в Windows 7. Другие детали:
>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdout.encoding
'cp850'
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')
>>>
Может кто-нибудь дать мне какие-нибудь советы о том, как лучше всегообрабатывать специальные символы?Или они должны называться сущностями HTML?Должно быть, это довольно распространенная проблема, но я не смог найти каких-либо простых объяснений в Интернете.
ОБНОВЛЕНИЕ: я добился здесь некоторого прогресса.Основной алгоритм:
- Читать веб-страницу в механизме
- Использовать красивый суп, чтобы делать то, что ... когда я это записываю, я понятия не имею, для чего предназначен этот этап предварительной обработки,точно.
- Используйте красивый суп для извлечения информации из таблицы, которая упорядочена иначе, чем для обработки специальных символов.
- Запишите информацию в файл, разделенный |для учета пунктуации в длинных записях ячеек и для возможности импорта в Excel и т. д.
Прогресс находится на этапе 3. Я использовал некоторые регулярные выражения и htmlentityrefs для изменения записи ячейки кода по записи в ячейке.,См. это сообщение в блоге .
Оставшаяся трудность: код, записанный в файл (и выведенный на экран), все еще неверен, но, похоже, проблема заключается в правильном указании кодировки.Проблема кажется меньше, по крайней мере.