Найти - Пользователи
Полная версия: Парсинг и кодировка
Начало » Python для новичков » Парсинг и кодировка
1
TitanFighter
Добрый вечер и с наступившей пятницей!

Взываю отложить пивко\водочку\коньячок на пару мин в сторону и помочь решить проблему

Парсю таким кодом
def prepare_content(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
    response = requests.get(url, headers=headers)
    tree = fromstring(response.text)
    tree.make_links_absolute(response.url)
    return tree

Нужно обработать “date”:
    date = tree.xpath('.//div[@class="h3"]/text()')[1].strip().split(',')[0]
    print(date) # 'Ночь c 27 ноября на 28 ноября'
    if 'Ночь с' in date:
        date = ' '.join(a.split()[-2:])

Не срабатывает “if ‘Ночь с’ in date”.

Делаю проверку:
1) Копирую ‘Ночь c 27 ноября на 28 ноября’ и оставляю из нее только ‘Ночь c’
2) Руками на клаве набираю ‘Ночь с’
Делаю п1 == п2 аля ‘Ночь c’ == ‘Ночь c’ и получаю False!

Делаю проверку №2, беру оба раза ‘Ночь c’ с фразы ‘Ночь c 27 ноября на 28 ноября’, сравниваю и получаю True.

С этого же сайта получаю другую строку:
movie = tree.xpath('.//h2/a/text()')[0]
print(movie) # 'Стажер (2015)'
Потом захотел чтото с этой строкой сделать - не получалось.
Из “результата отработки парсера” скопировал строку ‘Стажер (2015)’ и сделал х = ‘Стажер (2015)’, в итоге получил ‘Стажер\xa0(2015)’
(C “датой”, что выше, такой финт не получился)
“\xa0” - у меня и на других сайтах вылазит Я знаю, что это “пробел”.

Гуглил и поиском прошелся на форуме - можно чистить строки через replace или через join (strip не помогает) - но как по мне, не вариант - парсится много всего, скорость упадет. Я в кодировках плаваю… Может есть какой то вариант, чтоб засунуть в функцию prepare_content какой-то код, чтоб “чистило” всю запарсеную страницу?
Хотелось бы получать текст точно такой же, как прямо в IDE набираю, без всяких “примисей”.

Благодарю.
FishHook
TitanFighter
Делаю п1 == п2 аля ‘Ночь c’ == ‘Ночь c’ и получаю False!
Стою на асфальте я в лыжи обутый

TitanFighter
Вот и я в итоге в лыжи обутый)
Попробуем еще раз по-другому)

То что вы показали, я тоже сделал во второй проверке (чтоб убедится что крыша совсем у меня не поехала).
А когда я делал первый раз проверку, я:
а) написал с клавы “ ‘Ночь с’ == ”
б) скопировал строку ‘Ночь c 27 ноября на 28 ноября’ из результата print(date), вставил после ‘==’ из п1, убрал лишнее (т.е. “ 27 ноября на 28 ноября”).
В итоге получилось ‘Ночь с’ == ‘Ночь с’ и оно нифига не True.

Опять же, я в кодировках не бум-бум, но как я могу предполагать, в парсинге кодировка отличается от той, что используется в IDLE, и когда я скопировал результат выполнения print, я скопировал текст с одной кодировкой, а когда написал с клавы, то кодировка используется другая. И если мое предположение правильное, прошу помочь перевести запарсеный текст в кодировку IDLE.

Упростим:
date = day.xpath('.//div[@class="h3"]/text()')[1].strip().split(',')[0]
print('date:', date)
print("'Ночь с' in date:", 'Ночь с' in date)
if 'Ночь с' in date:
    date = ' '.join(a.split()[-2:])
print('date:', date)
###########
date: Ночь c 27 ноября на 28 ноября
'Ночь с' in date: False
date: Ночь c 27 ноября на 28 ноября
FishHook
TitanFighter
Я понимаю, что вы мне показываете. Я уже 2 раза сказал, что если с клавы набрать то, что и вы, то все нормально. С запарсенными данными такое не проходит.

Причина оказалась проста:
print(“'Ночь с (c rus)' in date:”, ‘Ночь с’ in date) # False
print(“'Ночь c (c eng)' in date:”, ‘Ночь c’ in date) # True
Pytonist
Всем здрасте.
Есть файл со списком УРЛов, которые нужно открывать поочерездно и парсить оттуда текст
Есть вот такой нехитрый код:
with open("urls.txt", "r", encoding="???") as text:
    get = text.read()
    urls_list = get.split(",")
    for url in urls_list:
        html = urlopen(url).read()
        soup = BeautifulSoup(html, "lxml")                                      
        for tag in soup.find_all("p"):
            print(tag.text)

Для проверки результата использую print() и постоянно получаю ошибку связанную с кодировкой. Перепробовал разные варианты кодировок и всегда вылазит ошибка. Подскажите что не так? Убил уже на это кучу времени.
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB