LINUX.ORG.RU

Скачать *.epub с сайта, либо весь сайт с полным контентом?

 , ,


2

1
Приветствую!
наткнулся на сайтец, где англоязычная фантастика в хорошем ассортименте есть, нос качивать вручную, по одной книге - зело неудобно и долго.

пробовал wget-ом, пробовал httrack-ом - сами книжки нифига не выцепляются, а хотелось бы...

может кто чего подскажет?

путь для тренировок - 
https://www.rulit.me/author/heinlein-robert-anson

преферрабл формат - епуб.
пробовал и 

wget -mkEpnp –no-check-certificate -r -A .epub https://www.rulit.me/author/heinlein-robert-anson


на выходе вообще пустой фолдер с названием сайта :(

А весь сайт вгетом дернуть полностью?

Или там путь к файлу генерится через js? Я из-за этого поленился доделывать качалку манги ;)

Zhbert ★★★★★ ()
Ответ на: комментарий от Zhbert

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

но при скачивании сайта всего этого нема, только хтмл-ы и прочее...

к сожалению владельцы подобных ресурсов, похоже, пытаются препятсвовать их оптовому скачиванию...:(

wisedraco ★★ ()
Ответ на: комментарий от wisedraco

без вариантов автоматизации, при таком положении дел?

  1. Пройтись по всем страницам и получить ID этих файлов-книг.
  2. Сгенерировать ссылки вида https://www.rulit.me/download-books-75195.html?t=epub
  3. Скормить список ссылок wget’у или cURL’у.

к сожалению владельцы подобных ресурсов, похоже, пытаются препятсвовать их оптовому скачиванию…:(

Конечно, ведь если сайт легко скачать, то могут появиться его зеркала.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
wget -r -k -l 7 -p -E -nc http://www.rulit.me/author/heinlein-robert-anson
anonymous ()

Курлом это достаточно просто делается: curl -O -J -L -k "https://www.rulit.me/download-books-[00000-99999].html?t=epub" например.
Возможно еще опцией на размер отсортировать книжки от мусора, с названиями косячит (имя должно браться из заголовка Content-Disposition, но не берется ), а так - работает.

redwagon ()
Ответ на: комментарий от redwagon

Курлом это достаточно просто делается

действительно, работает, но файлнеймы вида

download-books-00524.html?t=epub

download-books-00525.html?t=epub

download-books-00526.html?t=epub

download-books-00527.html?t=epub

download-books-00528.html?t=epub

download-books-00529.html?t=epub

download-books-00530.html?t=epub

и среди них куча html-страниц с сайта - как следствие проще таки вручную скачивать, так хотябы и название произведения, и понятно, что за файл...

но, спасибо в любом случае, да.

wisedraco ★★ ()
Последнее исправление: wisedraco (всего исправлений: 3)
Ответ на: комментарий от wisedraco

Можно. Есть консольный вариант хрома, который можно пускать из скрипта, им парсить и «рендерить» страницу, а из нее через lxml дергать ссылки.

Zhbert ★★★★★ ()
Ответ на: комментарий от wisedraco

Вот набросил скрипт, качает теперь с названиями:

#!/bin/bash 
for (( i=1; i<=100; i++ )) 
do 
url="https://www.rulit.me/download-books-$i.html?t=epub" 
filename=$(curl -sI $url | grep Location | awk -F '/' '{print $NF}') 
if [ -z "$filename" ]||[ "$filename" = "www.rulit.me" ]
then
continue
fi
curl -J -L -k -o $i.$filename -L $url 
done
Только проверка на пустой файл срабатывает, а [ "$filename" = "www.rulit.me" ] - нет. Качает в итоге все не пустое, в начале названия дописывается id книги. В примере диапазон от 1 до 100.

redwagon ()
Ответ на: комментарий от redwagon
моё почтение!

только вот оно всего 99 штук скачивает ( а на сайте, вестимо, сильно побольше),
и после расширения точку ставит - файлнейм получается типа 

91.singl-i-singl_RuLit_Net_91.epub?
92.russkij-dom_RuLit_Net_92.epub?
93.portnoj-iz-panamy_RuLit_Net_93.epub?
95.malenkaya-barabanshchica_RuLit_Net_95.epub?
96.komanda-smajli_RuLit_Net_96.epub?
97.vojna-v-zazerkale_RuLit_Net_97.epub?
98.vernyj-sadovnik_RuLit_Net_98.epub?
99.slovo-osvobozhdeniya_RuLit_Net_99.epub?
dload_books_curl.src

PS странно - в шелле после расширения видно знак вопроса, а миднайт коммандере - точку.
и скачивает не 99, а таки 100.

wisedraco ★★ ()
Последнее исправление: wisedraco (всего исправлений: 1)
Ответ на: комментарий от Deleted

Естественно:

for (( i=1; i<=100

да, за 10 секунд до прочтения сего сам понял, глянув на скрипт, сэнкс. но вот почему после расширения какой то символ, и почму он лс-ом как знак вопроса, а в мц как точка кажет?

wisedraco ★★ ()
Ответ на: комментарий от wisedraco

почему после расширения какой то символ

Потому что $filename надо было через echo пропустить. Это символ перевода строки offtop-а, скорее всего (\x0D).

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от wisedraco

Перед расширением - это часть имени, а в самом начале - id по которому книга скачалась. Теоретически, они могут не совпадать.

redwagon ()
Ответ на: комментарий от wisedraco

а ещё номер i в файлнейм два раза ставится - и вначале имени, и перед расширением...

Нет. Первый номер правильный (правда формат не алё), он скриптом генерится. А второй - это уже спасибо сайту.

Deleted ()
Ответ на: комментарий от redwagon
после последнего изменения - уже и три раза - посередине тоже. 
и совпадают, да...

bash-3.2$ ls -1
2.Zorin_Ivan__Vozvrashennye_metafiziki_chizneopisaniya_esse_stihotvoreniya_v_proze_RuLit_Net_2.epub
22.literaturnyj-zhurnal-quot-klyap-quot_22_RuLit_Net_22.epub
23.rossiya-nakanune-vtorogo-prishestviya-tajna-11-j-zapovedi_23_RuLit_Net_23.epub
24.zanimatelnaya-istoriya_24_RuLit_Net_24.epub
26.neizvestnyj-yulian-semenov_26_RuLit_Net_26.epub
27.vozvrashchyonnye-metafiziki-zhizneopisaniya-esse-stihotvoren_27_RuLit_Net_27.epub
28.podchinennaya-funkciya_28_RuLit_Net_28.epub
29.koshka-skazka-ob-osvobozhdenii-femininnosti_29_RuLit_Net_29.epub
3.Eschenbach_Wolfram__Parzival_3_RuLit_Net_3.epub
30.izbavlenie-ot-koldovstva-v-volshebnyh-skazkah_30_RuLit_Net_30.epub
31.alhimiya_31_RuLit_Net_31.epub
34.istoriya-vtoroj-mirovoj-vojny_34_RuLit_Net_34.epub
36.alyans-i-razryv-so-stalinym_36_RuLit_Net_36.epub
39.sud-morya_39_RuLit_Net_39.epub
4.Shamisso_Adelbert__Udivitelnaya_istoriya_Petera_Shlemilya_4_RuLit_Net_4.epub
40.preddverie-neba_40_RuLit_Net_40.epub
41.plat-svyatoj-veroniki_41_RuLit_Net_41.epub
5.Haiek_Fridrih__Chastnye_dengi_5_RuLit_Net_5.epub
6.fon_Haiek_Fridrih__Pagubnaya_samonadeyannost_6_RuLit_Net_6.epub
7.Franc_Mariya-Luiza__Lekcii_po_ungovskoi_tipologii_Podchinennaya_funkciya._Chuvstvuushaya_funkciya_7_RuLit_Net_7.epub
dload_books_curl.src


wisedraco ★★ ()
Ответ на: комментарий от redwagon

Удали в предпоследней строке $i.

А может не стоит:

    ii=$(printf "%04d" $i)
    curl -J -L -k -o $ii.$filename -L $url
Deleted ()
Ответ на: комментарий от redwagon

bash-3.2$ ls -1
Eschenbach_Wolfram__Parzival_3_RuLit_Net_3.epub
Franc_Mariya-Luiza__Lekcii_po_ungovskoi_tipologii_Podchinennaya_funkciya._Chuvstvuushaya_funkciya_7_RuLit_Net_7.epub
Haiek_Fridrih__Chastnye_dengi_5_RuLit_Net_5.epub
Shamisso_Adelbert__Udivitelnaya_istoriya_Petera_Shlemilya_4_RuLit_Net_4.epub
Zorin_Ivan__Vozvrashennye_metafiziki_chizneopisaniya_esse_stihotvoreniya_v_proze_RuLit_Net_2.epub
dload_books_curl.src
fon_Haiek_Fridrih__Pagubnaya_samonadeyannost_6_RuLit_Net_6.epub
literaturnyj-zhurnal-quot-klyap-quot_22_RuLit_Net_22.epub
rossiya-nakanune-vtorogo-prishestviya-tajna-11-j-zapovedi_23_RuLit_Net_23.epub

wisedraco ★★ ()
Ответ на: комментарий от Deleted
что значит - нормальная?
порядковый номер в начале файлнейма есть ок.
но удлинение и так частенько длинного файлнейма за счёт повторяющегося номера както не айс, по моему, нет?

ЗЫ  а почему теперь не с еденицы всё начинается?

bash-3.2$ ls -1
0002.Zorin_Ivan__Vozvrashennye_metafiziki_chizneopisaniya_esse_stihotvoreniya_v_proze_RuLit_Net_2.epub
0003.Eschenbach_Wolfram__Parzival_3_RuLit_Net_3.epub
0004.Shamisso_Adelbert__Udivitelnaya_istoriya_Petera_Shlemilya_4_RuLit_Net_4.epub
0005.Haiek_Fridrih__Chastnye_dengi_5_RuLit_Net_5.epub
0006.fon_Haiek_Fridrih__Pagubnaya_samonadeyannost_6_RuLit_Net_6.epub
0007.Franc_Mariya-Luiza__Lekcii_po_ungovskoi_tipologii_Podchinennaya_funkciya._Chuvstvuushaya_funkciya_7_RuLit_Net_7.epub
0022.literaturnyj-zhurnal-quot-klyap-quot_22_RuLit_Net_22.epub
0023.rossiya-nakanune-vtorogo-prishestviya-tajna-11-j-zapovedi_23_RuLit_Net_23.epub
dload_books_curl.src
bash-3.2$ 


wisedraco ★★ ()
Последнее исправление: wisedraco (всего исправлений: 1)
Ответ на: комментарий от Deleted

Так и было

таак, начинается! а ну положь книгу на место!:D

вообще странно, да, но в целом - вешь, с которой можно работать. спасибо всем причастным, завтра поставлю выкачатся сию библиотеку, указав в цикле сто тысячь ( думаю, должно хватить, дабы всё выкачать?), а дальше уже можно будет при нужде както файлнеймы подкорректировать регекспом или ещё как, полагаю...

wisedraco ★★ ()
Ответ на: комментарий от Radjah

Не пробовал, но вот как пример вывод заголовков полученных курлом, а там нет вообще хедера Content-Disposition:

$ curl -sI https://www.rulit.me/download-books-75195.html?t=epub
HTTP/1.1 302 Found
Server: nginx/1.6.2
Date: Sun, 06 Jan 2019 22:06:08 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30-0+deb8u1
Set-Cookie: PHPSESSID=o58jskrbgkg3ska84li9u8jve4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: https://www.rulit.me/data/programs/resources/epub/la-porta-sull-estate_RuLit_Net_75195.epub
Strict-Transport-Security: max-age=604800
Хотя через F12 в браузере или в постмане он появляется.

redwagon ()

Делал на коленке, так что говнокод.

# качаем список (10 страниц)
for ((i=0; i<=10; i++))
do
  curl -# https://www.rulit.me/author/heinlein-robert-anson/all/$i/date >> books.html 
done;
# ищем id книг
pcregrep -o -e "https://www.rulit.me/author/heinlein-robert-anson/[^.]+.html" books.html|pcregrep -o -e '\d{1,6}'|sort|uniq > books.txt
# собираем список для загрузки
for i in `cat books.txt`
do
  echo https://www.rulit.me/download-books-$i.html?t=fb2
  echo https://www.rulit.me/download-books-$i.html?t=epub
  echo https://www.rulit.me/download-books-$i.html?t=mobi
done > books.dl.txt
# качаем
wget --content-disposition -nc -i books.dl.txt
# Чистим мусор
rm books.dl.txt books.txt books.html

У каждой книги почему-то по два ID. При этом файлы качаются разные по размеру.

У меня получилось 285 файлов.

Radjah ★★★★★ ()
Последнее исправление: Radjah (всего исправлений: 1)
Ответ на: комментарий от Radjah

у них там на этого автора два энтри, возможно - из за этого.

https://www.rulit.me/author/all/1/surname?search=heinlein

даа, охренеть, вот бы у меня было столько мозгов, дабы уметь так... великое гран мерси! у мну тоже 285 файлов вышло :)

wisedraco ★★ ()
Последнее исправление: wisedraco (всего исправлений: 1)
Ответ на: комментарий от Radjah

Еще лучше будет если урлы для поиска отвязать от автора https://www.rulit.me/books/all/$i/date для курла и https://www.rulit.me/books/[^.]+.html для грепа

redwagon ()
Ответ на: комментарий от redwagon

По уму это вообще надо на каком-нибудь питоне делать, а не вот это всё.

Radjah ★★★★★ ()
Ответ на: комментарий от EXL

Возможо, стоит еще добавить и необходимые Referrer’ы к ссылкам

atsym ★★★★★ ()
Ответ на: комментарий от redwagon

урлы для поиска отвязать от автора

в смысле, чем лучще? автор, да ещё, пожалуй, жанр - одни из основных критерий группировки же, ведь, если меня интересует НФ -зачем мне религия там, или эзотерика с астрологиями какая? :-O

wisedraco ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.