Ошибка кодирования HTML с Scrapy 1.5.1 в Python - PullRequest
0 голосов
/ 24 августа 2018

Итак, я собираю данные с веб-страниц в Python 3.6. После получения ответа в кодировке возникает ошибка при попытке вывести данные в файл.

class ExampleSpider(scrapy.Spider):
name = 'example'

def start_requests(self):
    urls = [
        'http://www.bdfa.com.ar/plantel-Boca-Juniors-6.html',
    ]
    for url in urls:
        yield scrapy.Request(url=url, callback=self.parse, encoding='utf-8')

def parse(self, response):
    page = response.url.split("-")
    # lista = response.xpath('//*[@id="navPlalist"]/li/table/tr/td/img') # will use in the future.
    filename = 'Superliga-Plantel-%s-%s.html' % (page[-3], page[-2])
    with open(filename, 'wb') as f:
        f.write((response.body))

execute(['scrapy', 'crawl', 'example'])

Я попробовал 2 вещи:

Сначала без явного кодирования (документация Scrapy говорит, что он использует UTF-8 по умолчанию), затем конкретно я установил кодировку на UTF-8, и только некоторые части правильно закодированы, а другие нет. Например <title>Plantel de Club Atlético Boca Juniors|Equipo Actual|Lista de Jugadores</title> это хорошо закодировано

и эта другая часть <td width="50"><span class="selected" style="color:#F00;">Toda nuestra informaci&oacute;n ahora es gratuita. Agradecemos su donaci&oacute;n para continuar con nuestro proyecto, Gracias.</span></td> явно нет.

если я использую пакет lxml явно, синтаксический анализ выполняется без проблем.

Спасибо, Извините за мой английский.

1 Ответ

0 голосов
/ 25 августа 2018

Попробуйте codecs записать utf-8 в файл

import codecs

file = codecs.open("lol", "w", "utf-8")
file.write(u'\ufeff')
file.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...