#python #utf_8 #lxml
Учусь потихоньку парсить, возникла проблема с кодировкой. Код работает, но на некоторых страницах выкидывает ошибку UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 12: invalid start byte и ругается на строку print(company.text_content()) Как я понял, данная строка не может быть интерпретирована, как текст в UTF-8. Нашел решение такой же проблемы https://stackoverflow.com/questions/10226342/how-to-handle-unicodedecodeerror-without-losing-any-data , но к сожалению не помогло. Может еще что-нибудь посоветуете? import urllib.request import lxml.html as html import time BASE_URL="http://www.wholesalecentral.com/catoverview.htm" def pars_company(url): """парсим компании на странице СНачала парсим первую страницу, потом находим ссылки на все другие страницы и в цикле парсим их, далее сохраняем все в словарь""" dict_company={} page = urllib.request.urlopen(url) doc = html.document_fromstring(page.read()) for company in doc.xpath('.//div[@class="row listings"]/p/a[@onclick]'): print(company.text_content()) dict_company[company.text_content()]=company.get('href') page = urllib.request.urlopen(url) doc = html.document_fromstring(page.read()) pages=doc.xpath('.//div[@class="wide-content column"]/div[@class="row"]/p/a') for link in pages: next_link=urllib.request.urljoin(BASE_URL, link.get('href')) page = urllib.request.urlopen(next_link) doc = html.document_fromstring(page.read()) for company in doc.xpath('.//div[@class="row listings"]/p/a[@onclick]'): dict_company[company.text_content()]=company.get('href') return dict_company def main(): #dict_link=pars_mainpage(BASE_URL) pars_company('http://www.wholesalecentral.com/Licensed-Items-Collectibles.html?visitorid=654393974&dbid=1') if __name__ == "__main__" : main()
Ответы
Ответ 1
В общем проблема решилась изменением одной строчки: doc = html.document_fromstring(page.read().decode(encoding='unicode-escape'))
Комментариев нет:
Отправить комментарий