Мой проект scrapy дает мне странную кодировку для элементов при использовании селекторов CSS.
Вот соответствующий код:
После того, как запрос scrapy сделан и веб-страница загружена , parse_page вызывается с ответом ...
def parse_page(self, response):
# Using Selenium WebDriver to select elements
records = self.driver.find_elements_by_css_selector('#searchResultsTable > tbody > tr')
for record in records:
# Convert selenium object into scrapy.Selector object (necessary to use .add_css methods)
sel = Selector(text=record.get_attribute('outerHTML'))
# Instantiate RecordLoader (a custom item loader)
il = RecordLoader(item=Record(), selector=sel)
# Select element and pass to example_field's input processor
il.add_css('example_field', 'td:nth-child(2) > a::text')
il.add_css()
передает результат селектора CSS процессору ввода example_field, который для демонстрационных целей является только операторами печати и показывает проблему ...
def example_field_input_processor(text_html):
print(text_html)
print(type(text_html))
print(text_html.encode('utf-8'))
Вывод:
'\xa0\xa004/29/2020 10:50:24 AM,\xa0\xa0\xa0'
<class 'str'>
b'\xc2\xa0\xc2\xa004/29/2020 10:50:24 AM,\xc2\xa0\xc2\xa0\xc2\xa0'
Вот мои вопросы:
1) Почему селектор CSS не просто дал мне обычную строку Python? Связано ли это с преобразованием селектора CSS в текст с ::text
. Это потому, что веб-страница имеет другую кодировку? Я проверил, есть ли тег <meta>
, указывающий кодировку сайта, но его не было.
2) Когда я принудительно кодирую 'utf-8', почему я не получаю нормальный python строка вместо строки байтов, которая показывает все символы Юникода?
3) Моя цель - иметь обычную строку python (без добавления b, без странных символов), которую я могу разобрать. Как?