Недавно мне понадобилось получить данные с одного сайта. Готовой выгрузки с информацией на сайте нет. Данные я вижу, вот они передо мной, но не могу их выгрузить и обработать. Возник вопрос: как их получить? Немного «погуглив», я понял, что придется засучить рукава и самостоятельно парсить страницу (HTML). Какой тогда инструмент выбрать? На каком языке писать, чтобы с ним не возникло проблем? Языков программирования для данной задачи большой набор, выбор пал на Python за его большое разнообразие готовых библиотек.
Парсер можно писать на чем угодно. Да и библиотеки не всегда нужны, использовал раньше только ssl для https. В некоторых случаях проще писать свой код. Единственное, что хорошо бы иметь - параллельные потоки и прокси. Писал давно универсальный парсер, столкнулся с неприятным моментом ошибок в коде доноров, отсутствии закрывающих тегов или генерации страниц скриптами. Решил гибкой системой настроек паттернов, в приложении добавил редактор данных в таблице, куда заносятся паттерны для поочередной обработки данных. Для увеличения скорости добавил стоп-паттерн (та уникальная часть кода страницы, после которой нет нужных данных), после которого не нужно ждать окончания загрузки, а можно сразу работать с кодом страницы. И для ускорения именно разбора добавил старт-позицию до которой не нужно анализировать данные. Ну ещё счетчик страниц, автосохранение данных и настроек и т.п.
Мои приветствия. А как изменится код, если необходимо пройти по куче однотипных ссылок вида http://ololo.ru/forum/forum_id, где forum_id - цифры по нарастающей и выдрать какую-то информацию?
Т.е. тут добавляется цикл хождения по ссылкам for forum_id in ()
И где-то здесь конкретно у меня появляется проблема, что в результат либо пишется информация по последней пройденной ссылке, либо выдается информация по всем ссылкам, но с дублированием заголовков, т.е. что-то такое:
заголовок1 заголовок2
0 инф1 инф2
заголовок1 заголовок2
0 инф1 инф2
Как сделать вывод одной нормальной таблицей? Целый, видимо, квест =(
Добрый день.
Необходимо понимать структуру формирования ссылки по которой формируется необходимая страница.
На некоторый сайтах добавляется такой параметр как offset(на разных сайтах может писаться по разному, но смысл должен быть один), т.е. сколько необходимо пропустить страниц или записей. Поперемещайтесь по страницам и посмотрите какой параметр меняется еще.
Очень круто написано. Понятно и доступно. Спасибо огромное.
Не сможет ли кто-то подсказать, как исправить такую ошибку ?
File "I:/PYTHON/Обучение/Study/...../Parsing_01.py", line 43, in parse_table
date_question = widget_info[1].text.split('(')[1].split(')')[1].strip()
IndexError: list index out of range
Возникает, когда место проживания пишут типа (Балашиха (Московская область)), то есть две пары скобок :-( (Или хотя бы как прописать, чтобы игнорил эту ошибку и оставлял переменную пустой)
У самого получилось:
# Получаем дату вопроса
try:
date_question = widget_info[1].text.split('(')[1].split(')')[1].strip()
except IndexError:
date_question = widget_info[1].text.split('(')[2].split(')')[2].strip()
Да, вы правы, что для более быстрой работы необходима многопоточность, а также более глубокое понимание содержимого ресурса, который парсим. Частные проблемы тоже надо учитывать (автогенерация страниц)