Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

UnicodeDecodeError: 'utf-8' codec can't decode byte, Python

#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'))

Комментариев нет:

Отправить комментарий