B100969 Ларри Нивен. Дети Мира-кольца - и питоновый скрипт

Forums: 

Дети Мира-кольца

Ето было в порядке эксперимента взято с Альды хабрахабровым питоновым скриптом.

Скрипт делает HTML. FictionBookDesigner этот HTML напрямую берет плохо (все разметки слетают). Поетому гланды пришлось рвать через ухо, вот так:

Альда -> скрипт -> HTML-file -> browser -> select-all+copy -> MSWord -> paste (Paste special: HTML format) -> Save as RTF-file -> FictionBookDesigner -> умеренная ручная правка -> fb2-file -> Либрусек.

Единственный этап вручную тут - это "умеренная ручная правка". Но благодаря проходу через MSWord - RTF она действительно была очень умеренной.

Питоновый скрипт вот отсюда:
http://habrahabr.ru/blog/i_am_clever/36884.html

Собственно, вот текст, пусть будет:

Читаем Альдебаран с удобством
Наверняка некоторые хабралюди читают книги на сайте http://lib.aldebaran.ru. Они знают о том, что с некоторых пор текст на сайте "защищён" от копирования. Конечно, большая часть книг осталась доступна для скачивания в удобных для чтения форматах, но многие популярные книги можно только читать он-лайн. Что неудобно.
Следующий несложный скрипт на Питоне скачает книгу целиком, попутно вырезав весь мусор напиханый туда для затруднения копирования.

import urllib, re, sys
p_key = re.compile('http:\/\/lib\.aldebaran\.ru\/getpage\/1\/.*?"')
p_span = re.compile('<span class=h>(.*?)<\/span>')
p_s = re.compile('\';s \+= \'')
p_p = re.compile('(<p>.*?<\/p>)')
p_url_name = re.compile('^(http:\/\/lib.aldebaran.ru\/author\/.*?__)')
def getpage(url):
    try:
        key =  p_key.findall(urllib.urlopen(url).read())[0][-33:-1]
    except:
        return None
    urllib.urlopen("http://lib.aldebaran.ru/getpage/1/" + key) .read()
    page =  urllib.urlopen("http://lib.aldebaran.ru/getpage/2/" + key) .read()
    page = p_span.sub('', page)
    page = ''.join(p_p.findall(page))
    page = p_s.sub('', page)
    return page

url = sys.argv[1]
url = p_url_name.findall(url)[0]
i = 1
while True:
    page = getpage(url + str(i) + '.html')
    i += 1
    if page != None:
        print page
    else:
        sys.exit(0)

Скрипт принимает параметром командной строки ссылку на любую страницу книги и выводит её текст на стандартный вывод.
Пользоватся им очень просто:
python lit.py http://lib.aldebaran.ru/author/sadov_sergei/sadov_sergei_klinki_u_trona/sadov_sergei_klinki_u_trona__0.html > lit.html
P.S. Пожалуйста, оставим вопрос о этике в стороне. Лично я оплачиваю полюбившиеся книги непосредственно автору.

Вывод: ай да i_am_clever, ай да сукин сын! Спасибо ему, молодчина.

X