网站推广.NET

网站推广.NET

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

来源:互联网

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-8import sysfrom functools import partialfrom string import Templateimport argparseimport base64from urllib.parse import unquotefrom lxml.html import fromstringimport requestsfrom htmlutils import extractTextfrom termutils import foreachsession = 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('//p[@class="info"]/p[1]/a/text()')[0] author = doc.xpath('//p[@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('//p[@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 Truedef 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/&#&/u/g' # ascii2uni -qaF # ascii2uni -qaJ # <p> paragraphs url = l.get('href') _, _, _, _, bookid, chapterid = url.split('/') chapterid = chapterid.split('.', 1)[0] r = session.post('http://www.feisuzw.com/skin/hongxiu/include/fe1sushow.php', data={  'bookid': bookid, 'chapterid': chapterid, }, headers={'Referer': url}) text = r.content[3:] # strip BOM text = base64.decodebytes(text).replace(b'&#&', br'\u') text = text.decode('unicode_escape') text = unquote(text) text = text.replace('<p>', '').replace('</p>', '\n\n') title = l.text write(title) write('\n\n') write(text) write('\n') return titleif __name__ == '__main__': parser = argparse.ArgumentParser(description='下载飞速中文网小说') parser.add_argument('url',           help='小说首页链接') parser.add_argument('name', default='$name-$author.txt', nargs='&#63;',           help='保存文件名模板(支持 $name 和 $author') parser.add_argument('-s', '--start', default=1, type=int, metavar='N',           help='下载起始页位置(以 1 开始)') args = parser.parse_args() main(args.url, args.name, args.start-1)
飞速中文网飞速中文