Дмитрий Сергеевич (axshavan) wrote,
Дмитрий Сергеевич
axshavan

* * *

Вчера ночью я написал инструкцию по скачиванию выложенных для онлайнового чтения книг с сайта fictionbook.ru для знакомой программистки моей матушки. Они там с коллегами по работе читают всякую хероту типа уСТИНОВОЙ, дОНЦОВОЙ и прочую блевоту, книжками обмениваются и так далее. Но деньги тратить жалко, плюс еще эти ж книжени вмиг раскупаются из киосков у остановок. Ну а мне не жалко, я стаскиваю раз в два месяца оттуда по триста килобайт текста для мамани, она там у себя распечатывает на работе и читает в маршрутке. Так вот, написал инструкцию. Часа полтора писал сочинял, и вот решил сохранить в жэжэшечке у себя, чтоб труд даром не пропадал.

Инструкция по, так сказать, бесплатному скачиванию книг с сайта fictionbook.ru



Предупреждение


Вполне возможно, описанный ниже метод покажется слишком сложным. На этот случай есть еще способ - делать скриншоты страниц сайта и распечатывать их как картинки, либо предварительно пропускать через какую-нибудь программу для OCR, например, распознавая текст с помощью ABBYY FineReader. Но если человек знаком с программированием и с HTML, то описанный ниже способ покажется не таким уж и сложным, и, возможно даже, более простым и менее муторным, чем обработка скриншотов и подготовка их к распечатыванию.

Основная проблема при скачивании книг в том, что бесплатно это не всегда можно сделать. Обычно надо послать смс на короткий номер или совершить еще какое-нибудь аморальное действие. Для тех, кто этого делать не хочет, хозяева многих сайтов, в том числе и fictionbook.ru, выкладывают книгу для чтения со страниц сайта. Заодно можно показать кучу рекламных баннеров и подзаработать не меньше, чем при оплате для скачивания архива. Разумеется, существует масса защитных механизмов, препятствующих скачиванию книги при чтении с сайта. Все они основаны на java-скриптах, а если их отключить, то текст книги не загрузится, так как он загружается на страницу все теми же java-скриптами.
Если вами неинтересно читать про способы защиты, читайте дальше от цифры 2.

1. Способы защиты текста от копирования с сайта


Первым делом java-скрипты блокируют возможность выделить текст на странице и не дают показывать контекстное меню (как с этим бороться - после цифры 2). Во-вторых, сам текст безудержно испохаблен перед выводом на экран, так что даже если вам удастся его скопировать, читать вы его все равно не сможете. В текст вставлены случайным образом куски html-разметки следующего вида: <span class="h">x</span>, где х - любая буква русского алфавита. При отображении на сайте спан прячется, так как в css-файле указана инструкция типа .h {display: none;}, а вот когда вы собираетесь почитать этот текст у себя, самодовольно потирая руки, то и обнаруживаете множество лишних букв в тексте. Кроме того, все точки в тексте заменены на картинки с изображением точек. Естественно, у вас-то такой картинки нет, и вы точки не видите. В итоге текст, скачанный с сайта хитрым способом, практически нечитаем.
Надо отдать должное изобретателям этих защитных механизмов. Они молодцы.

2. Хитрый способ по скачиванию текста с сайта.


Как уже понятно по названию, этот метод заточен под сайт fictionbook.ru. На другом сайте с другой разметкой, другими хитростями, этот способ работать, может быть, не будет, и если хозяева фикшнбука что-нибудь переделают у себя, тоже может перестать работать.

Итак, вам понадобятся: текстовый редактор, браузер FireFox с установленным плагином FireBug, и какой-нибудь язык программирования.
Первым делом надо запретить java-скриптам прятать контекстное меню (меню, показывающееся при нажатии на правую кнопку мыши). Для этого зайдите в настроки браузера и уберите галку, как показано на рисунке.

86.50 КБ

FireBug можно установить, просто набрав в адресной строке браузера строку "getfirebug", а можно сразу пройти по ссылке: https://addons.mozilla.org/firefox/addon/1843
Как только он установлен, ваш браузер готов к копированию текста с сайта. Выбираете желаемое произведение, нажимаете "читать онлайн", видите первую страницу текста. Нажмите на правую кнопку мыши и в появившемся контекстном меню выберите пункт "Inspect element" (см. рис.).

61.80 КБ

Нажимать на правую кнопку мыши лучше всего, когда курсор находится в районе первой-второй строки текста книги. Если он у вас будет слишком низко, то вам придется прокручивать структуру html-кода вверх, а если вы ткнёте выше, то можете и вовсе не найти то, что вам надо.
Выбрали Inspect element? Не пугайтесь, это интерфейс FireBug - профессионального инструмента для отладки html-верстки. Вам нужен следующий элемент, найдите его:
<div class="onlineread" id="onlineread" style="color: Black;" unselectable="on" oncontextmenu="return false">
В этом диве лежит весь нужный вам текст. Наведите на него курсор мыши и нажмите правую кнопку. В появившемся контекстном меню выберите элемент Copy innerHTML - скопировать внутреннее содержание этого дива, то есть необходимый вам текст. Потом возьмите ваш текстовый редактор (не Microsoft Word! Лучше всего - notepad или подобные) и вставьте текст туда.

56.29 КБ

Так как обычно книга разбита на несколько страниц, повторите всё это для каждой страницы. В итоге у вас должен получиться один большой (или несколько маленьких) текстовых файлов. Содержимое получившегося текстового файла должно быть примерно таким:

<h1><a name="part_58"></a>Золот<span class="h">ш</span>ая <span class="h">у</span>книга детектива<br>Сборник рассказов</h1><h2><a name="part_62"></a>Т<img src="/static/img/b.gif" alt="а" class="dot" width="1" border="0" height="1"> Гармаш-Роффе<br>Снеговик</h2><p>…Снежок попал прямо в лицо<img src="/static/img/b.gif" alt="л" class="dot" width="1" border="0" height="1"> Залепил глаза, забил нос.</p>
<p>– Ааа, ты так!!! – завопила Наташка, стирая снег. – Ну, я тебе сейчас!.<img src="/static/img/b.gif" alt="ь" class="dot" width="1" border="0" height="1"></p>
<p>О<span class="h">щ</span>на зачерпнула пригоршню снега, которого было так много, что даже не приходилос<span class="h">ц</span>ь за ним особо наклоняться, – ловко слепила снежок, маленький и плотный: она знала, <span class="h">я</span>что такие летят быстрее, а бьют больнее, чем рыхлые и большие, какие делал Женька, и стала целиться.</p>
<p>Женька высун<span class="h">ъ</span>ул ей...

Там можно найти и вышеупомянутые <span class="h">, и картинки вместо точек. Если же вы не послушались меня и воспользовались Microsoft Word или еще каким-нибудь крутым текстовым процессором и он поубивал всю html-разметку, то вам, наверное, придется сделать всё по-новой.

3. Борьба с текстом


В текст были инжектированы всякие штуки, затрудняющие чтение. Но они были инжектированы автоматически, и притом довольно тупо. Следовательно, другой тупой механизм может запросто их оттуда выдрать. Так как я пишу на php, то у меня дома есть и свой карманный веб-сервер, и всё, что мне нужно, поэтому механизм, превращающий технически неудобочитаемую каку в технически удобочитаемую, у меня написан на php и его основная функциональная часть состоит всего из четырех строчек. Думаю, человек, знакомый с программированием, может написать всё сам или перевести на более знакомый ему язык.
$text = file_get_contents($_FILES['infile']['tmp_name']);            // загрузить содержимое обрабатываемового файла в переменную
$text = preg_replace('`<img[\s\S^>]*>`U', '.', $text);               // заменить картинки на точки с помощью регулярного выражения
$text = preg_replace('`<span class="h">[\S^<]+</span>`', '', $text); // убрать спаны класса h с помощью другого регулярного выражения
$text = strip_tags($text, '<p>');                                    // вырезать все html-тэги, кроме <p> и </p>
echo $text;                                                          // вывалить полученный результат в поток вывода, откуда его можно скоприровать, потом вставить в Microsoft Word, сделать шрифт поменьше, добавить колонтитул с номером страницы и распечатать с двух сторон на казенной бумаге


UPD 2009.01.10 00:27 Да, я знаю, что некоторые книги находятся в свободном скачивании. Но говно вроде дОНЦОВОЙ предлагают скачать за денюжку.
Tags: web
Subscribe

  • Первый заметный результат диеты

    Ну, конечно, на самом деле не первый. Я же каждое утро взвешиваюсь, скрупулёзно записываю результаты, а потом ещё и строю графики. И ещё чаще…

  • Плёнка №185

    Тематика снимков обычная: городское фото. Время съёмок: март 2021. Плёнка: Fomapan profi line action 400 Фотоаппарат и объектив: Zenit-E + Helios…

  • Фотографии с двух прогулок

    Четвёртого апреля было, хотя и ветрено, но солнечно и относительно тепло. Не то, что сегодня... сегодня погода испортилась и снова стало холодно. К…

  • Post a new comment

    Error

    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 8 comments