Python实现的飞速中文网小说下载脚本

375次阅读  |  发布于5年以前

1.JavaScript 加密什么的最讨厌了 :-(

1).eval 一个不依赖外部变量的函数立即调用很天真,看我 nodejs 来干掉你!
2).HTTP 请求的验证首先尝试 Referer,「小甜饼」没有想像中的那么重要。
3).curl 和各命令行工具处理起文本很顺手呢
4).但是 Python 也没多几行呢

2.Requests 效率比 lxml 自己那个好太多
3.progressbar 太先进了,我还是自个儿写吧……
4.argparse 写 Python 命令行程序必备啊~
5.string.Template也很好用哦
6.以下是主代码啦,除了标准库以及 lxml 和 requests,没有的模块都在无所不能的 winterpy 仓库里。其实主代码也在的。


    #!/usr/bin/env python3
    # vim:fileencoding=utf-8

    import sys
    from functools import partial
    from string import Template
    import argparse
    import base64
    from urllib.parse import unquote

    from lxml.html import fromstring
    import requests

    from htmlutils import extractText
    from termutils import foreach

    session = requests.Session()

    def main(index, filename='$name-$author.txt', start=0):
     r = session.get(index)
     r.encoding = 'gb18030'
     doc = fromstring(r.text, base_url=index)
     doc.make_links_absolute()
     name = doc.xpath('//div[@class="info"]/p[1]/a/text()')[0]
     author = doc.xpath('//div[@class="info"]/p[1]/span/text()')[0].split()[-1]

     nametmpl = Template(filename)
     fname = nametmpl.substitute(name=name, author=author)
     with open(fname, 'w') as f:
      sys.stderr.write('下载到文件 %s。\n' % fname)
      links = doc.xpath('//div[@class="chapterlist"]/ul/li/a')
      try:
       foreach(links, partial(gather_content, f.write), start=start)
      except KeyboardInterrupt:
       sys.stderr.write('\n')
       sys.exit(130)

     sys.stderr.write('\n')
     return True

    def gather_content(write, i, l):
     # curl -XPOST -F bookid=2747 -F chapterid=2098547 'http://www.feisuzw.com/skin/hongxiu/include/fe1sushow.php'
     #   --referer http://www.feisuzw.com/Html/2747/2098547.html
     # tail +4
     # base64 -d
     # sed 's/&#

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8