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/envpython3 #vim:fileencoding=utf-8 importsys fromfunctoolsimportpartial fromstringimportTemplate importargparse importbase64 fromurllib.parseimportunquote fromlxml.htmlimportfromstring importrequests fromhtmlutilsimportextractText fromtermutilsimportforeach session=requests.Session() defmain(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) withopen(fname,'w')asf: 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) exceptKeyboardInterrupt: sys.stderr.write('\n') sys.exit(130) sys.stderr.write('\n') returnTrue defgather_content(write,i,l): #curl-XPOST-Fbookid=2747-Fchapterid=2098547'http://www.feisuzw.com/skin/hongxiu/include/fe1sushow.php' #--refererhttp://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:]#stripBOM 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') returntitle if__name__=='__main__': parser=argparse.ArgumentParser(description='下载飞速中文网小说') parser.add_argument('url', help='小说首页链接') parser.add_argument('name',default='$name-$author.txt',nargs='?', 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)