Как вставить видеоролик, аудио или flash на сайт знают все, а как разместить на сайте книгу pdf в виде удобной читалке читайте в этой статье.
Оглавление:
- Простой код размещения книги pdf на сайте,
- Вставить pdf-файл c помощью google диск
- Книга на сайте в виде удобной читалки с эффектом перелистывания страниц.
Размещаем книгу pdf с помощью кода html
Вы можете загрузить pdf-файл книги на сайт. Если у вас blogger, то вы не сможете загрузить pdf – в этом случае вы можете загрузить файл на ucoz в файловом менеджере или в сообщение блога liveinternet.ru.
Загружаем на ucoz – в админ панели переходим в радел “Файловый менеджер” –> загрузить файл и скопируйте прямую ссылку:

Второй способ получения прямой ссылки на файл pdf – загрузка в сообщение блога liveinternet.ru. Создайте запись в расширенном режиме и загрузите ваш файл в виде вложения. Опубликуйте сообщение. Скопируйте ссылку на файл:
Подставляем ссылку на файл в код:
<iframe src="http:/spishu.ru/Zarabotok-na-partnerskih-programmah.pdf" />
или так:
<iframe height="480" src="https://spishu.ru/Zarabotok-na-partnerskih-programmah.pdf" width="500"></iframe>
Замените ссылку, выделенную желтым на вашу ссылку на книгу в формате pdf.
Пример:
Как разместить книгу на сайте с google диск
Загружаем pdf-файл на google диск и открываем ссылку. Не забудьте сделать загруженный файл общедоступным.
Осталось получить код вставки книги для размещения в блоге: Файл –> Опубликовать в интернете
Пример
Размещаем книгу в виде читалки
Для этого нам нужно зарегистрироваться на сайте https://issuu.com/.
Загружаем книгу в форматах pdf, doc, ppt и др, но не более 500 листов через функцию upload. Дожидаемся загрузки, даем название, описание публикации и, если вы хотите, чтобы ваши посетители могли скачивать вашу книгу, отмечаем флажок напротив “Readers can download”.
На данный момент вставить книгу с сайта https://issuu.com/ возможно только в премиум версии.
После публикации (Кнопка “Publish now”), просматриваем книгу – “Open Publication”.
Для того, чтобы получить код книги для публикации на сайте или в блоге под просмотром книги перейдите по ссылкам Share –> Embed и выберите подходящий код для вашего ресурса:
Это может быть скрипт или iFrame-код.
|
Esso11 5 / 5 / 0 Регистрация: 20.08.2017 Сообщений: 685 |
||||
|
1 |
||||
|
06.03.2019, 19:51. Показов 7013. Ответов 18 Метки нет (Все метки)
Всем доброго времени суток. Перейду сразу к теме:
но моя белеберда не работает подскажите как это исправить что бы хоть менялся цвет при нажатии на название книги
0 |
|
523 / 380 / 244 Регистрация: 31.05.2016 Сообщений: 1,035 |
|
|
06.03.2019, 20:11 |
2 |
|
0 |
|
5 / 5 / 0 Регистрация: 20.08.2017 Сообщений: 685 |
|
|
06.03.2019, 20:14 [ТС] |
3 |
|
sash23, да, именно так, а можно комментарий к вашему коду?
0 |
|
sash23 523 / 380 / 244 Регистрация: 31.05.2016 Сообщений: 1,035 |
||||||||||||
|
06.03.2019, 20:25 |
4 |
|||||||||||
0 |
|
5 / 5 / 0 Регистрация: 20.08.2017 Сообщений: 685 |
|
|
06.03.2019, 20:32 [ТС] |
5 |
|
sash23, а зачем ……сначала удаляем класс selected у всех элементов
0 |
|
2033 / 1092 / 408 Регистрация: 29.04.2016 Сообщений: 2,612 |
|
|
06.03.2019, 20:49 |
6 |
|
Esso11, что бы эемент который выделен стал черным
1 |
|
5 / 5 / 0 Регистрация: 20.08.2017 Сообщений: 685 |
|
|
06.03.2019, 20:54 [ТС] |
7 |
|
Mr_Sergo, а где про это прочесть можно я не пойму все равно для чего это ну станет черным… рочему нельзя сразу взять елемент такой какой он есть
0 |
|
2033 / 1092 / 408 Регистрация: 29.04.2016 Сообщений: 2,612 |
|
|
06.03.2019, 20:59 |
8 |
|
а где про это прочесть можно Не знаю, это логика придуманная автором…
для чего это ну станет черным ну вам же нужно что бы цвета переключались? для этого и становится обратно черным Добавлено через 29 секунд
рочему нельзя сразу взять елемент такой какой он есть вот этого не понял
0 |
|
sash23 523 / 380 / 244 Регистрация: 31.05.2016 Сообщений: 1,035 |
||||
|
06.03.2019, 21:24 |
9 |
|||
|
Esso11, если этого не сделать то при следующем клике предыдущий элемент останется оранжевым. Добавлено через 11 минут
1 |
|
5 / 5 / 0 Регистрация: 20.08.2017 Сообщений: 685 |
|
|
07.03.2019, 20:49 [ТС] |
10 |
|
Mr_Sergo, подскажите почему может не работать ваш код? ошибок нет но цвета не меняет(((
0 |
|
Mr_Sergo 2033 / 1092 / 408 Регистрация: 29.04.2016 Сообщений: 2,612 |
||||||||||||
|
07.03.2019, 22:12 |
11 |
|||||||||||
|
ваш код? Не знаю где вы тут нашли мой код
Код мог не работать из-за синтаксиса Добавлено через 4 минуты
0 |
|
супермизантроп 3938 / 2976 / 692 Регистрация: 18.04.2012 Сообщений: 8,625 |
|
|
08.03.2019, 17:41 |
12 |
|
а можно комментарий можно, только сначала изучите HTML-теги unordered lists <UL>, ordered lists <OL> и list items <LI> Mr_Sergo, вас моя рекомендация тоже касается
1 |
|
523 / 380 / 244 Регистрация: 31.05.2016 Сообщений: 1,035 |
|
|
08.03.2019, 18:18 |
13 |
|
0 |
|
Mr_Sergo 2033 / 1092 / 408 Регистрация: 29.04.2016 Сообщений: 2,612 |
||||||||
|
08.03.2019, 20:27 |
14 |
|||||||
|
Тут вообще без JS можно было -> https://codepen.io/Mr_Sergo/pen/KEmEKz
0 |
|
mrtoxas 3824 / 2674 / 1521 Регистрация: 12.07.2015 Сообщений: 6,674 Записей в блоге: 4 |
||||||||
|
08.03.2019, 20:28 |
15 |
|||||||
|
без JS
1 |
|
Mr_Sergo 2033 / 1092 / 408 Регистрация: 29.04.2016 Сообщений: 2,612 |
||||||||
|
08.03.2019, 20:43 |
16 |
|||||||
|
mrtoxas,
0 |
|
3824 / 2674 / 1521 Регистрация: 12.07.2015 Сообщений: 6,674 Записей в блоге: 4 |
|
|
08.03.2019, 20:47 |
17 |
|
Mr_Sergo, вариант с target будет скроллить страницу
0 |
|
2033 / 1092 / 408 Регистрация: 29.04.2016 Сообщений: 2,612 |
|
|
09.03.2019, 00:04 |
18 |
|
mrtoxas, Добавлено через 3 часа 8 минут
0 |
|
5 / 5 / 0 Регистрация: 20.08.2017 Сообщений: 685 |
|
|
09.03.2019, 13:08 [ТС] |
19 |
|
kalabuni, спасибо за совет
0 |
|
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
09.03.2019, 13:08 |
|
19 |
Вы когда-нибудь задумывались о том, что на HTML и CSS можно сделать книгу? Оказывается, есть умельцы, выкладывающие свои работы на codepen.io, которые с помощью 3D трансформаций могут сделать вполне реалистичные страницы, а также позволить заглянуть внутрь книги. Некоторые примеры нужно смотреть только на большом экране.
Макет книги
Автор Erin E. Sullivan
See the Pen Book Layout by Erin E. Sullivan (@erinesullivan) on CodePen.18892
Открывающаяся книга на чистом CSS
Автор Dhanish
See the Pen CSS Only Flipping Book by Dhanish (@dhanishgajjar) on CodePen.18892
Открывающаяся книга с картинками
Автор Fabrizio Bianchi
See the Pen CSS 3D Bending Effect — Page Flip by Fabrizio Bianchi (@_fbrz) on CodePen.18892
Предзагрузчик в виде книги (блокнота, тетради)
Автор Jon Kantner
See the Pen Book Preloader by Jon Kantner (@jkantner) on CodePen.0
Приоткрытая книга при наведении
Автор Yancy Min
See the Pen Books Hover Animation by Yancy Min (@yancy) on CodePen.18892
Поздравительная открытка
Автор Vladislav
See the Pen [3D] Flip Hover Effects, Book Of Congratulations from the game by Vladislav (@rikanutyy) on CodePen.18892
Приоткрываем книгу при наведении
Автор Rafael
See the Pen Bookshelf by Rafael (@rafaelrinaldi) on CodePen.18892
Отличная анимация открывающейся книги при наведении курсора мыши
Внутри предусмотрена рабочая ссылка Download для скачивания книги.
Автор Ronny Siikaluoma
See the Pen CSS Animated books by Ronny Siikaluoma (@siiron) on CodePen.18892
Эффект 3d книги при клике
Автор NVC
See the Pen Book Group UI by NVC (@Snowing) on CodePen.18892
Поворот книги при движении мышью
Автор Thomas Podgrodzki
See the Pen Book Flip by Thomas Podgrodzki (@Podgro) on CodePen.18892
Автор Anna Sabatini
See the Pen Book. HTML+CSS only. #CodePenChallenge by Anna Sabatini (@sabanna) on CodePen.18892
Анимация поворота книги
Сам пример позволяет посмотреть на книгу с разных сторон, используя переключатели вида книги и камеры. Но лучше всего смотрится анимация поворота книги. Бесценная вещь для онлайн-магазина!
Автор Alex
See the Pen 3d Lighting Effects in CSS by Alex (@alexmwalker) on CodePen.18892
Листаем книгу
Автор maxew
See the Pen
cpc — bookText by Elen (@ambassador)
on CodePen.0
Книга на столе
Автор Mina Mounir
See the Pen 3D Book Design by Mina Mounir (@mina-mounir) on CodePen.18892
Книжная полка
Автор Yuhomyan
See the Pen Pure CSS Books by Yuhomyan (@yuhomyan) on CodePen.18892
Автор Lynn Fisher
See the Pen Single div CSS book search by Lynn Fisher (@lynnandtonic) on CodePen.18892
Не совсем книжная, но полка с большим количеством элементов
Автор Lynn Fisher
See the Pen CSS collector’s cabinet by Lynn Fisher (@lynnandtonic) on CodePen.18892
Книга в 2-х проекциях
Автор Lynn Fisher
See the Pen CSS coffee table book effect by Lynn Fisher (@lynnandtonic) on CodePen.18892
Автор Tanner Dolby
See the Pen Books — CSS by Tanner Dolby (@tannerdolby)on CodePen.0
Постеры в 2D и 3D
Автор Lynn Fisher
See the Pen CSS leaning card effect by Lynn Fisher (@lynnandtonic) on CodePen.18892
Вариант страницы для книжного магазина
В примере есть сортировка по категориям, алфавиту, дате публикации. При наведении мы видим поворот книги. При клике на кнопке «Details» — дополнительную информацию.
Автор Joe
See the Pen Book Viewer by Joe (@jjcarey) on CodePen.18892
Анимация появления книг
Автор Michael Schofield
See the Pen Library Books CSS Spinner by Michael Schofield (@michaelschofield) on CodePen.18892
Эффект опускания книги при наведении курсора мыши
Автор Lyna Nguyen
See the Pen Book animation (HTML & CSS) by Lyna Nguyen (@WebDevLyna) on CodePen.18892
Слайдер для демонстрации книг
Автор Aysenur Turk
See the Pen
Book Store UI by Aysenur Turk (@TurkAysenur)
on CodePen.0
Второй слайдер с использованием анимации GSAP от автора Jos Faber.
See the Pen
Switch 3D game cover slider with GSAP by Jos Faber (@josfabre)
on CodePen.0
Трехмерная карточка
Трехмерная карточка (3d-card), которая может быть стилизована под книгу.
Автор Amit Sheen
See the Pen 3D CSS card by Elen (@ambassador)
on CodePen.0
Карточки для оплаты
Трехмерные карты для оплаты. Могут быть использованы для стилизации книг или постеров
Автор Andreas Storm
See the Pen Tariff Cards by Elen (@ambassador) on CodePen.0
Трехмерные слои (блоки), парящие в воздухе
Сделано на React. Автор Daniel Barrio Fierro.
See the Pen
Isometric Floating Layers (SVG) by Daniel Barrio Fierro (@db4rr)
on CodePen.0
Просмотров: 2 190
Галерея в виде записной книжки
В данном уроке будет рассмотрено, как использовать и настраивать отличный плагин jQuery Booklet (автор Will Grauvogel). Сделаем страницу в виде записной книжки со ссылками на уроки.
Начнем!
Разметка HTML
Структура кода HTML задается разметкой для плагина, которая должна включать элемент div с id “mybook”. Также мы добавим несколько навигационных элементов и индикатор загрузки, который будет выводиться во время загрузки контента.
<div class="book_wrapper"> <a id="next_page_button"></a> <a id="prev_page_button"></a> <div id="loading" class="loading">Загружаем страницы...</div> <div id="mybook" style="display:none;"> <div class="b-load"> <div> <img src="images/1.jpg" alt=""/> <h1>Витаем в облаках - тема для сайта</h1> <p>В данном уроке с помощью jQuery ...</p> <a href="#" class="article">Урок</a> <a href="#" class="demo">Демонстрация</a> </div> <div> ... </div> </div> </div> </div>
Каждая страница записной книжки размещается внутри элемента div, который также помещен внутрь элемента div с классом “b-load”. Так как плагин позволяет использовать пользовательские кнопки для переворачивания страниц, то в конфигурации мы зададим использование наших ссылок со стрелками.
CSS
Для определения стилей мы зададим «шкурку» для плагина, то есть таблицу стилей, в которой будут переопределяться некоторые стили, которые идут вместе с плагином (поэтому «шкурка» должна подключаться к странице после стилей плагина).
Начнем адаптацию с класса “booklet” и определим для него тени и скругленные углы для рамочки:
.booklet{
-moz-box-shadow:0px 0px 1px #fff;
-webkit-box-shadow:0px 0px 1px #fff;
box-shadow:0px 0px 1px #fff;
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
}
Добавим фоновые изображения для левой и правой страниц, так что они будут выглядеть как в реальной книге:
.booklet .b-wrap-left{
background:#fff url(../images/left_bg.jpg) no-repeat top left;
-webkit-border-top-left-radius: 10px;
-webkit-border-bottom-left-radius: 10px;
-moz-border-radius-topleft:10px;
-moz-border-radius-bottomleft: 10px;
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
}
.booklet .b-wrap-right{
background:#efefef url(../images/right_bg.jpg) no-repeat top left;
-webkit-border-top-right-radius: 10px;
-webkit-border-bottom-right-radius: 10px;
-moz-border-radius-topright: 10px;
-moz-border-radius-bottomright: 10px;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
}
Также определим стили для нумерации страниц и добавим подходящий верх рамочки:
.booklet .b-counter{
bottom:10px;
position:absolute;
display:block;
width:90%;
height:20px;
border-top:1px solid #ddd;
color:#222;
text-align:center;
font-size:12px;
padding:5px 0 0;
background:transparent;
-moz-box-shadow:0px -1px 1px #fff;
-webkit-box-shadow:0px -1px 1px #fff;
box-shadow:0px -1px 1px #fff;
opacity:0.8;
}
В структуре HTML мы добавили обертку вокруг книги, поэтому мы можем использовать фоновое изображение:
.book_wrapper{
margin:0 auto;
padding-top:50px;
width:905px;
height:540px;
position:relative;
background:transparent url(../images/bg.png) no-repeat 9px 27px;
}
Добавим линию ниже заголовка каждой страницы:
.book_wrapper h1{
color:#13386a;
margin:5px 5px 5px 15px;
font-size:26px;
background:transparent url(../images/h1.png) no-repeat bottom left;
padding-bottom:7px;
}
Абзацы и ссылки будут иметь следующие стили:
.book_wrapper p{
font-size:16px;
margin:5px 5px 5px 15px;
}
.book_wrapper a.article,
.book_wrapper a.demo{
display:block;
height:41px;
text-decoration:none;
outline:none;
font-size:16px;
color:#555;
float:left;
line-height:41px;
}
.book_wrapper a.demo{
margin-left:100px;
background:transparent url(../images/circle_demo.png) no-repeat 50% 0px;
width:145px;
padding-left:50px;
}
.book_wrapper a.article{
margin-left:10px;
background:transparent url(../images/circle_article.png) no-repeat 50% 0px;
width:45px;
padding-left:20px;
}
.book_wrapper a.article:hover,
.book_wrapper a.demo:hover{
background-position:50% -41px;
color:#13386a;
}
Придадим изображениям более натуральный вид с помощью светлой рамочки с белой тенью и тисненый вид:
.book_wrapper img{
margin:10px 0px 5px 35px;
width:300px;
padding:4px;
border:1px solid #ddd;
-moz-box-shadow:1px 1px 1px #fff;
-webkit-box-shadow:1px 1px 1px #fff;
box-shadow:1px 1px 1px #fff;
}
Цвет рамки правой страницы нужно сделать немного темнее:
.booklet .b-wrap-right img{
border:1px solid #E6E3C2;
}
Для стрелок навигации будем использовать спрайт, который содержит все четыре стрелки (на все состояния):
a#next_page_button,
a#prev_page_button{
display:none;
position:absolute;
width:41px;
height:40px;
cursor:pointer;
margin-top:-20px;
top:50%;
background:transparent url(../images/buttons.png) no-repeat 0px -40px;
}
a#prev_page_button{
left:-30px;
}
a#next_page_button{
right:-30px;
background-position:-41px -40px;
}
a#next_page_button:hover{
background-position:-41px 0px;
}
a#prev_page_button:hover{
background-position:0px 0px;
}
Индикатор загрузки имеет рамку со скругленными углами, и она полупрозрачная. Мы позиционируем его на правой стороне книги:
.loading{
width:160px;
height:56px;
position: absolute;
top:50%;
margin-top:-28px;
right:135px;
line-height:56px;
color:#fff;
padding-left:60px;
font-size:15px;
background: #000 url(../images/ajax-loader.gif) no-repeat 10px 50%;
opacity: 0.7;
z-index:9999;
-moz-border-radius:20px;
-webkit-border-radius:20px;
border-radius:20px;
}
JavaScript
В jQuery мы просто вызовем плагин после того, как все изображения будут загружены. Описание всех опций плагина можно посмотреть на странице плагина jQuery Booklet:
$(function() {
var $mybook = $('#mybook');
var $bttn_next = $('#next_page_button');
var $bttn_prev = $('#prev_page_button');
var $loading = $('#loading');
var $mybook_images = $mybook.find('img');
var cnt_images = $mybook_images.length;
var loaded = 0;
//Предварительно загружаем все страницы в книжке,
//а затем вызываем плагин Booklet
$mybook_images.each(function(){
var $img = $(this);
var source = $img.attr('src');
$('<img/>').load(function(){
++loaded;
if(loaded == cnt_images){
$loading.hide();
$bttn_next.show();
$bttn_prev.show();
$mybook.show().booklet({
name: null, // Имя буклета, которое выводится в заголовке документа
width: 800, // Ширина контейнера
height: 500, // Высота контейнера
speed: 600, // Скорость перехода между страницами
direction: 'LTR', // Направление организации контента, по умолчанию LTR (left to right - слева направо), может быть RTL (справа налево)
startingPage: 0, // Индекс страницы, которая будет выводиться первой
easing: 'easeInOutQuad', // Метод сглаживания для завершения трансформации
easeIn: 'easeInQuad', // Метод сглаживания для первой половины трансформации
easeOut: 'easeOutQuad', // Метод сглаживания для второй половины трансформации
closed: true, // Запускаем книгу "закрытой", будут добавлены пустые страницы в начало и конец
closedFrontTitle: null, // Используется с опциями "closed", "menu" и "pageSelector", определяет заголовок пустой начальной страницы
closedFrontChapter: null, // Используется с опциями "closed", "menu" и "chapterSelector", определяет имя главы пустой начальной страницы
closedBackTitle: null, // Используется с опциями "closed", "menu" и "pageSelector", определяет заголовок пустой последней страницы
closedBackChapter: null, // Используется с опциями "closed", "menu" и "chapterSelector", определяет имя главы пустой конечной страницы
covers: false, // Используется с опцией "closed", делает первую и последнюю страницу обложками, без нумерации страниц (если возможно)
pagePadding: 10, // Отступ для обертки каждой страницы
pageNumbers: true, // Выводит номер на каждой странице
hovers: false, // Разрешает анимацию предварительного просмотра страниц при наведении курсора мыши, выводятся маленькие изображения предыдущей и следующей страницы
overlays: false, // Разрешает навигацию с использованием слоя перекрытия, когда разрешено - ссылки в контексте не будут реагировать на нажатия кнопки мыши
tabs: false, // Добавляет закладки вдоль верха страницы
tabWidth: 60, // Определяем ширину закладок
tabHeight: 20, // Определяем высоту закладок
arrows: false, // Добавляем стрелки поверх кромок книжки
cursor: 'pointer', // Установка css для курсора для боковой области книжки
hash: false, // Разрешает навигацию с использованием хэш строки, например: #/page/1 для страницы 1, будет действовать на все книжки с разрешенной опцией 'hash'
keyboard: true, // Разрешает навигацию с использованием клавиш стрелок(влево: предыдущая страница, вправо: следующая)
next: $bttn_next, // Селектор для элемента, который используется как выключатель перехода к следующей странице
prev: $bttn_prev, // Селектор для элемента, который используется как выключатель перехода к предыдущей странице
menu: null, // Селектор элемента, который используется как область меню, требуется для 'pageSelector'
pageSelector: false, // Разрешает навигацию с помощью выпадающего меню для страниц, требует опции 'menu'
chapterSelector: false, // Разрешает навигацию с помощью выпадающего меню глав, определяется атрибутом "rel", требует опции 'menu'
shadows: true, // Выводить тени при анимации страниц
shadowTopFwdWidth: 166, // Ширина тени для верха анимации вперед
shadowTopBackWidth: 166, // Ширина тени для верха анимации назад
shadowBtmWidth: 50, // Ширина тени для низа анимации
before: function(){}, // Возвратная функция, которая вызывается перед выполнением каждой анимации
after: function(){} // Возвратная функция, которая вызывается после выполнения каждой анимации
});
Cufon.refresh();
}
}).attr('src',source);
});
});
Также в проекте используется Cufon для вывода специфических шрифтов. Для него нужно добавить следующие строки в раздел заголовка нашего кода HTML:
<script src="cufon/cufon-yui.js" type="text/javascript"></script>
<script src="cufon/RodeoExtraBold_400.font.js" type="text/javascript"></script>
<script src="cufon/Betina_400.font.js" type="text/javascript"></script>
<script type="text/javascript">
Cufon.replace('h1,p,.b-counter');
Cufon.replace('.book_wrapper a', {hover:true});
Cufon.replace('.title', {textShadow: '1px 1px #C59471', fontFamily:'RodeoExtraBold'});
Cufon.replace('.reference a', {textShadow: '1px 1px #C59471', fontFamily:'RodeoExtraBold'});
Cufon.replace('.loading', {textShadow: '1px 1px #000', fontFamily:'RodeoExtraBold'});
</script>
Готово!
Время на прочтение
5 мин
Количество просмотров 7.7K
Поскольку большинство книг я читаю с наладонника, книги для чтения нужно где-то брать. Как правило, интересующие меня книги я нахожу в сетевых библиотеках в текстовом формате (txt, html, fb2). Вместе с тем, бывают случаи, когда хочется прочитать книгу, которая выложена на сайте, где скачивание в принципе не предусмотрено, да ещё и разделена на несколько html-страниц (как эта, например). В таком случае можно сохранить каждую html страницу вручную, но такой способ имеет два важных недостатка. Во-первых, если книга разделена на 15-20 страниц, сохранение вручную займёт много времени и будет раздражать. Во-вторых, вместе с текстом книги мы получим кучу всякого мусора — текст, не относящийся к книге, таблицы, скрипты, ссылки на другие сайты и прочую муть.
Чтобы упростить себе жизнь, мы напишем программу, которая скачает книгу для нас. Из сказанного выше следует, что нам нужна программа, которая: а) скачает в нужном порядке все страницы, по которым разбросана книга; б) с каждой страницы возьмёт только тест и ничего лишнего и в) сохранит весь текст книги в одном html-файле.
В качестве примера мы возьмём книгу Владимира Плунгяна «Почему языки такие разные. Популярная лингвистика». Я нашёл только одну сетевую бибилотеку, где её можно скачать в текстовом формате, да и там требуется регистрация, поэтому мы скачаем её по указанной ссылке с помощью программы, о которой речь пойдёт дальше. Для написания программы мы используем язык программирования Python. Я использовал Python версии 2.6. Эту или более новую версию можно скачать бесплатно на официальном сайте.
Скачиваем страницы
Чтобы скачать страницы, нам понадобятся их адреса. Как мы видим, адреса всех страниц кроме первой одинаковы и различаются только номером:
http://profismart.ru/web/bookreader-115980-номер_страницы.php
Благодаря этому, мы сможем не писать их вручную, а сгенерировать с помощью следующего кода:
for i in range(2,29):
url = "http://profismart.ru/web/bookreader-115980-%i.php" % i
Это даст нам адреса всех страниц со второй по двадцать восьмую. Адрес первой страницы отличается от остальных (http://profismart.ru/web/bookreader-115980.php), поэтому его мы вставим в программу вручную.
Далее каждую из этих страниц мы скачаем, а сам html-код запишем в переменную html:
for i in range(2,29):
# Генерируем гиперссылку
url = "http://profismart.ru/web/bookreader-115980-%i.php" % i
# Качаем страницу
html = ""
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
Извлекаем из страницы нужный текст
Html-код, содержащий текст книги, мы извлечём из кода страницы с помощью регулярных выражений (regular expressions). В нашем случае текст находится внутри страницы между тегами <td style="padding:7px" class="ps24 ps37"> и </td>. Каждый параграф текста находится между тегами <div> и </div>, а сами теги <div> без дополнительных параметров используются только в тексте книги. Таким образом, чтобы извлечь текст, нам достаточно найти первый тег <div> и взять весь текст от него до первого тега </td>. Регулярное выражение будет выглядеть так:
(<div>.+?</div>)</td>
Точка обозначает любой символ, а знак «плюс» говорит, что символ должен быть как минимум один. Знак вопроса после комбинации .+ говорит, что мы хотим взять минимальное количество символов, которые удовлетворяют нашему запросу. Таким образом, мы ищем весь текст от первого найденного в html-коде тега <div> до первой (благодаря знаку вопроса) комбинации </div></td>. Скобки указывают на ту часть найденного текста, которую мы возьмём. В данном случае мы берём весь найденный текст без тега </td>, который нам не нужен. Чтобы использовать регулярное выражение в нашей программе, добавим в её начало следующую строку:
text_regex = re.compile(u"(<div>.+?</div>)</td>", re.IGNORECASE | re.DOTALL | re.UNICODE)
Обращаться к выражению мы будем по имени text_regex. Текст книги мы сохраним в переменной book. С добавкой регулярного выражения код, который обрабатывает страницы 2-28, будет выглядеть так:
for i in range(2,29):
# Генерируем гиперссылку
url = "http://profismart.ru/web/bookreader-115980-%i.php" % i
# Качаем страницу
html = ""
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
# Извлекаем из страницы нужный текст и добавляем его к уже имеющемуся
book = book + text_regex.search(html).group(1)
Первую страницу мы обработаем отдельно. Из неё мы возьмём текст книги и заголовок для нового html-файла, который создаст наша программа. Заголовок мы извлечём с помощью следующего регулярного выражения:
(<html.+?<body>)
То есть мы берём весь код от тега <html> до тега <body> включительно. В коде, который мы получим, будет немного мусора, но поскольку он не повлияет на отображение страницы в браузере или на экране наладонника, мы оставим его как есть. Если очень захотим, позже удалим вручную в каком-нибудь редакторе. Как и для предыдущего выражения, добавим в начало программы строку:
head_regex = re.compile(u"(<html.+?<body>)", re.IGNORECASE | re.DOTALL | re.UNICODE)
Код, обрабатывающий первую страницу будет выглядеть так:
# Качаем первую страницу
url = "http://profismart.ru/web/bookreader-115980.php"
html = ""
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
# Берём заголовок
head = head_regex.search(html).group(1)
book = book + head
# Извлекаем и сохраняем текст книги
book = book + text_regex.search(html).group(1)
Сохраняем текст книги в файл
Здесь всё просто. К содержимому переменной book нужно добавить закрывающие теги для <html> и <body> и записать его в файл. Это делает следующий код:
# Открываем файл для записи
file_out = open('book.html', 'w')
# Записываем содержимое переменной
file_out.write(book)
# Записываем закрывающие теги
file_out.write("n</body></html>")
# Закрываем файл
file_out.close()
Собираем всю программу вместе
В конечную версию программы я добавил замену тегов <div>...</div> на <p align=justify>...</p> и вывод информации о странице, которая обрабатывается в данный момент. Первое — потому что мне нравится, когда текст выровнен по ширине страницы. Второе — чтобы программа во время работы подавала хоть какие-нибудь признаки жизни.
Полный текст программы можно сохранить в файле с расширением .py и запустить. Вот он:
import urllib
import re
text_regex = re.compile(u"(<div>.+?</div>)</td>", re.IGNORECASE | re.DOTALL | re.UNICODE)
head_regex = re.compile(u"(<html.+?<body>)", re.IGNORECASE | re.DOTALL | re.UNICODE)
book = ""
# Download first page
url = "http://profismart.ru/web/bookreader-115980.php"
print "Page 1"
print url
html = ""
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
print "Page downloaded."
# Extract page head and book text
book = book + head_regex.search(html).group(1)
book = book + text_regex.search(html).group(1)
for i in range(2,29):
# Generate page url
url = "http://profismart.ru/web/bookreader-115980-%i.php" % i
print "Page %i" % i
print url
# Download the page
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
print "Page downloaded."
# Extract required text
book = book + text_regex.search(html).group(1)
# Replace <div> with <p align=justify>
book = book.replace("<div>", "n<p align=justify>")
book = book.replace("</div>", "</p>")
# Write to file
file_out = open('book.html', 'w')
file_out.write(book)
file_out.write("n</body></html>")
file_out.close()












