- PVSM.RU - https://www.pvsm.ru -
Некоторое время назад решил я освежить знания и почитать что-нибудь о графах. «Ну конечно же, на Хабре должны быть хорошие статьи!» — подумал я, и оказался прав. Статьи есть и их много. Но выглядит они преимущественно вот так: раз [1], два [2], три [3]. Откройте и догадайтесь с одной попытки почему что-то понять из этих статей совершенно невозможно, хотя написано вполне понятным языком. Нет картинок! Ну а как изучать графы без картинок? Никак.
Новичок на Хабре недоуменно спросит: «Как так — нет картинок? Есть же habrastorage.org!». Да, есть. Но был он не всегда, а автоматически на него перезаливаться картинки и вовсе стали только в июле 2013-го [4]. А до этого картинки хостились где-попало — на всяких радикалах, имейджхаках, даже на дропбокс, бывало, люди наивно пытались что-то выкладывать. В итоге мы имеем на Хабре кучу статей 2006-2013 года с отсутствующими картинками.
Давайте это пофиксим!
Перед нами на первом этапе стоят следующие задачи:
В общем, только ленивый ещё не парсил Хабр, ну а мы же не ленивые. Тем более, что там на Python + requests писать:
Заливаем код на виртуалку в облаке, запускаем, возвращаемся через 2 дня (можно было бы, конечно, парсить в несколько потоков — но мне помнится, где-то в FAQ Хабр просил не дёргать его ботами чаще чем 2 раза в секунду).
Всего в статьях «До Пришествия Хабрастораджа» было найдено 157601 картинок [7], размещённых на «левых» хостингах изображений. Из них 92549 ссылок [8] всё ещё валидны, а 65052 ссылок [9] — уже нет.
Ну ок, у нас есть ссылки на 65052 недоступных картинок в статьях на Хабре. Что с этим делать? Достать их из кеша archive.org [10], конечно же! Он для того и придумывался!
Проверить наличие картинки в веб-архиве можно нехитрым запросом:
http://archive.org/wayback/available?url=%image_url%
Например, отсутствующая в статье habrahabr.ru/post/63982/ [3] ссылка на картинку img513.imageshack.us/img513/3580/pic1e.jpg [11] вполне доступна по ссылке http://web.archive.org/web/20131103061340/http://img513.imageshack.us/img513/3580/pic1e.jpg [12]
Есть, правда, одна беда. Иногда интернет-архив утверждает, что у него имеется ссылка на закешированную картинку, а на самом деле её нет. Врёт, в общем. Т.е. нам придётся проверять и каждую ссылку на закешированную картинку. Ну, ничего, проверим [13].
Заливаем, запускаем, ждём полдня.
В веб-архиве оказалось доступно 13863 картинки [14] из тех, которые больше недоступны по оригинальным ссылкам в статьях на Хабре.
Весь этот эксперимент дал нам неплохую «среднюю температуру по больнице»: мы теперь знаем, что у залитой на случайный
Итак, теперь у нас есть массив с ещё валидными ссылками [8] на картинки и второй массив [14], с битыми ссылками и соответствующими им ссылками на доступные картинки в веб-архиве. В этом месте можно было бы попросить администрацию Хабра взять эти данные и написать 4 строки кода, чтобы перезалить это всё на habrastorage.org и обновить ссылки в имеющихся статьях, но я не знаю, будут ли они этим заниматься. А читать-то статьи в нормальном виде хочется! И поэтому мы пойдём своим путём. Можно, конечно, сказать «Читайте статьи прямо с веб-архива!», но это как-то не особо поучительно и к чему бы был весь этот сбор данных.
Вторым порывом может стать желание написать расширение для Хрома, подменяющие плохие ссылки на хорошие, но делать этого мне не хочется по целому ряду причин:
Поэтому мы пойдём другим путём и напишем кое-что, решающее все вышеуказанные проблемы. Что именно? А об этом вы узнаете из следующей статьи [17].
P.S. Логическое разделение на две статьи добавлено для удобства чтения, поскольку использованный во второй статье метод не имеет никакого отношения к картинкам на Хабре, ну и наоборот.
Автор: tangro
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/83936
Ссылки в тексте:
[1] раз: http://habrahabr.ru/post/61884/
[2] два: http://habrahabr.ru/post/65617/
[3] три: http://habrahabr.ru/post/63982/
[4] только в июле 2013-го: http://habrahabr.ru/post/188436/
[5] Парсинг Хабра: https://github.com/ezhikus/HabraImagesFixer/blob/master/parse_habr.py
[6] Проверка валидности картинок: https://github.com/ezhikus/HabraImagesFixer/blob/master/check_images.py
[7] 157601 картинок: https://github.com/ezhikus/HabraImagesFixer/blob/master/img_info/all_images.txt
[8] 92549 ссылок: https://github.com/ezhikus/HabraImagesFixer/blob/master/img_info/good_images.txt
[9] 65052 ссылок: https://github.com/ezhikus/HabraImagesFixer/blob/master/img_info/bad_images.txt
[10] archive.org: http://archive.org
[11] img513.imageshack.us/img513/3580/pic1e.jpg: http://img513.imageshack.us/img513/3580/pic1e.jpg
[12] http://web.archive.org/web/20131103061340/http://img513.imageshack.us/img513/3580/pic1e.jpg: http://web.archive.org/web/20131103061340/http://img513.imageshack.us/img513/3580/pic1e.jpg
[13] проверим: https://github.com/ezhikus/HabraImagesFixer/blob/master/check_webarchive.py
[14] 13863 картинки: https://github.com/ezhikus/HabraImagesFixer/blob/master/img_info/fixable_images.txt
[15] хостинг: https://www.reg.ru/?rlink=reflink-717
[16] archive.org: https://archive.org
[17] следующей статьи: http://habrahabr.ru/company/infopulse/blog/251363/
[18] Источник: http://habrahabr.ru/post/251259/
Нажмите здесь для печати.