文库吧小说爬取下载打包 EPUB

查看 136|回复 8
作者:飞龙使者   
采用整本下载的接口,无需登录(但需要知道小说ID),用正则分章。
开源在 Github 上:https://github.com/apachecn/Book ... dTool/lightnovel.py
关键代码:
[ol]
  • def format_text(text):
  •     # 多个换行变为一个
  •     text = re.sub(r'(\r\n)+', '\r\n', text)
  •     # 去掉前两行
  •     text = re.sub(r'^.+?\r\n.+?\r\n', '', text)
  •     # 去掉后两行
  •     text = re.sub(r'\r\n.+?\r\n.+?$$$$', '', text)
  •     # 划分标题和段落
  •     def rep_func(m):
  •         s = m.group(1)
  •         return '' + s[4:] + '' \
  •             if s.startswith('    ') else \
  •             '' + s + ''
  •     text = re.sub(r'^(.+?)$$$$', rep_func, text, flags=re.M)
  •     # 拆分章节,过滤空白章节
  •     chs = filter(None, text.split(''))
  •     # 将章节拆分为标题和内容
  •     map_func = lambda x: {
  •         'title': re.search(r'(.+?)', x).group(1),
  •         'content': re.sub(r'.+?', '', x),
  •     }
  •     return list(map(map_func, chs))
  •    
  • def get_info(html):
  •     root = pq(html)
  •     dt = root('#content > div:nth-child(1) > table:nth-child(1) tr:nth-child(2) > td:nth-child(4)').text()[5:].replace('-', '') or 'UNKNOWN'
  •     url = root('#content > div:nth-child(1) > div:nth-child(6) > div > span:nth-child(1) > fieldset > div > a').attr('href')
  •     title = root('#content > div:nth-child(1) > table:nth-child(1) tr:nth-child(1) > td > table tr > td:nth-child(1) > span > b').text()
  •     author = root('#content > div:nth-child(1) > table:nth-child(1) tr:nth-child(2) > td:nth-child(2)').text()[5:]
  •     return {'dt': dt, 'url': url, 'title': fname_escape(title), 'author': fname_escape(author)}
  •    
  • def download_ln(args):
  •     id = args.id
  •     save_path = args.save_path
  •     headers = default_hdrs.copy()
  •     headers['Cookie'] = args.cookie
  •    
  •     url = f'https://www.wenku8.net/book/{id}.htm'
  •     html = request_retry('GET', url, headers=headers).content.decode('gbk')
  •     info = get_info(html)
  •     print(info['title'], info['author'], info['dt'])
  •    
  •     ofname = f"{save_path}/{info['title']} - {info['author']} - {info['dt']}.epub"
  •     if path.exists(ofname):
  •         print('已存在')
  •         return
  •     safe_mkdir(save_path)
  •    
  •     articles = [{
  •         'title': info['title'],
  •         'content': f"作者:{info['author']}",
  •     }]
  •     url = f'http://dl.wenku8.com/down.php?type=udefault_hdrstf8&id={id}'
  •     text = request_retry('GET', url, headers=headers).content.decode('utf-8')
  •     chs = format_text(text)
  •     articles += chs
  •     gen_epub(articles, {}, None, ofname)
  • [/ol]复制代码
    已发布到 PYPI,可以一键下载安装:
    [ol]
  • pip install BookerDownloadTool
  • dl-tool ln   
  • [/ol]复制代码

    代码, 章节

  • Wapj_Wolf   

    谢谢分享,分析学习中。
    zjh889   

    好东西,谢谢,楼主辛苦了!
    likezqc   

    好东西 感谢分享
    charleschai   

    wenku8关闭了吧
    TaoaoLXXXL   

    感谢大佬分享
    yihailanxin   

    大佬,咋用啊?
    haiyangnanzi   

    在哪儿下?大佬,有成品吗?小白求
    infozzz   

    学习💪
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部