FAQ: Секреты и уловки парсинга в python
Приготовьтесь, это будет большая статья и предполагаю много дней у меня уйдет на написание этой статьи полностью.
Для чего и для кого эта статья?
Конечно же в помощь таким же как я, каким я был еще год назад, начинающим скажем так "парсингистом".
Я не профессиональный программист, никогда им не был и уже разумеется и не буду.
Я всего лишь любитель-самоучка. Нет разумеется в интернете прошел немало онлайн-курсов, даже имею сертификаты об окончании таких онлайн-курсов, а некоторые недоокончил, забросил на полпути, под рукой всегда интересные книжки по питону, Лутц и другие. За что этим энтузиастам большое конечно мое человеческое спасибо.
Вот теперь хочу в ответ поделиться тем, что я умею.
Но так как повторюсь я не профессионал, в ходе написания статьи могут и проскальзывать иногда какие-то наивности, так сказать издержки непрофессионализма. Прошу строго не судить за это.
Все это я думаю, тем более интересно будет, так как у меня ситуация так сказать с ограниченными возможностями.
В чем ограничения?
В том, что я пишу плагин конкретно под имиджи (прошивки) конкретных спутниковых ресиверов.
А в них установлена только конкретная версия python, в данном случае python версии максимум
2.7.12 с соответствующими разумеется библиотеками, и то не всеми конечно же, имиджи не резиновые.
Когда давным-давно есть уже, как знаете намного более поздние версии питона - 3.х.х, ситуация как вы понимаете существенно меня ограничивает. И даже более того, много полезных библиотек которые можно было бы установить даже на эту версию питона, в имиджах не установлены.
Разумеется можно доустанавливать, что и делают плагинописатели, и тянется иногда за плагином большущий хвост зависимостей. Но ведь не все же подряд можно доустанавливать. Во-первых нет на фидах имиджей, но и это разумеется не проблема, но ведь имиджи не резиновые, и процы у них, совсем не как у компьютеров.
Так что, вот такое ограничение.
Но ведь интереснее тем паче выходить-то из такой ситуации!
Начнем непосредственно с того как получить страницы, их обработка, и закончим обработкой зашифрованных ссылок на медиафайлы.
Хотя конечно вроде бы, ну что сложного в получении кода страниц сайтов и их обработке?
Ну нет, не говорите, вообще честно говоря, если бы я чуть более года назад, знал бы с каким океаном водных течений придется столкнуться в деле написания такого плагина, абсолютно честно, испугался бы и ни за что не смог бы взяться за это дело.
Блаженны не неверующие, а не знающие и не предполагающие.
Что имеем при старте?
Разумеется неплохое знание питона, раз уж мы с его помощью собрались парсить.
Ну и конечно же глубокое знание возможностей замечательной библиотеки
json.
Без него при парсинге ну никак.
И знание возможностей библиотек для парсинга.
А их как известно море.
BeatifulSoap,
urllib,
urllib2,
urllib3,
requests,
xml,
lxml (замечательная библиотека), ну и конечно же регулярные выражения
re и т.д. и т.п.
В первую очередь будем использовать
urllib и
urllib2, хотя бы потому, что они уже предустановлены в имиджах.
Далее уже по выбору.
Я бы предпочел бы
lxml, ах какая замечательная (по моему мнению) библиотека, как легко и главное быстро парсятся
xml и
html с ее помощью.
Но я с самого начала удержался от этой идеи. Хотя конечно возможность доустановить эту библиотеку в имидж существует, но во-первых это лишняя нагрузка на флеш, во-вторых кажись нет его на фидах, значит сложности для юзеров обеспечены, ну и в-третьих без него обходятся другие авторы медиаплагинов, чем я хуже?
Точно такая же ситуация с
BeatifulSoap.
Значит решено. Для получения страниц будем использовать
urllib,
urllib2,
urllib3,
requests, а для обработки в основном регулярные выражения. Нет, я понимаю, когда существуют такие библиотеки как
BeatifulSoap и
lxml, это наверно извращение использовать регулярку для этого дела. Но, во-первых у меня нет другого выхода в данной ситуации, во-вторых это быстрее.
Итак приступим.
Продолжение следует. По наличию свободного времени.
--