Python實(shí)現(xiàn)的飛速中文網(wǎng)小說下載腳本
1.JavaScript 加密什么的最討厭了 :-(
1).eval 一個不依賴外部變量的函數(shù)立即調(diào)用很天真,看我 nodejs 來干掉你!
2).HTTP 請求的驗(yàn)證首先嘗試 Referer,「小甜餅」沒有想像中的那么重要。
3).curl 和各命令行工具處理起文本很順手呢
4).但是 Python 也沒多幾行呢
2.Requests 效率比 lxml 自己那個好太多
3.progressbar 太先進(jìn)了,我還是自個兒寫吧……
4.argparse 寫 Python 命令行程序必備啊~
5.string.Template也很好用哦
6.以下是主代碼啦,除了標(biāo)準(zhǔn)庫以及 lxml 和 requests,沒有的模塊都在無所不能的 winterpy 倉庫里。其實(shí)主代碼也在的。
#!/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/&#&/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 title if __name__ == '__main__': parser = argparse.ArgumentParser(description='下載飛速中文網(wǎng)小說') 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)
相關(guān)文章
Python多個MP4合成視頻的實(shí)現(xiàn)方法
最近接觸了個項(xiàng)目,需要把多個文件合成一個視頻,本文主要使用Python把多個MP4合成視頻,感興趣的可以了解一下2021-07-07Python?Matplotlib?marker?標(biāo)記詳解
這篇文章主要介紹了Python?Matplotlib?marker?標(biāo)記詳解,Matplotlib,風(fēng)格類似?Matlab?的基于?Python?的圖表繪圖系統(tǒng),詳細(xì)內(nèi)容需要的小伙伴可以參考一下2022-07-07Python的標(biāo)準(zhǔn)模塊包json詳解
這篇文章主要介紹了Python的標(biāo)準(zhǔn)模塊包json詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03Python使用get_text()方法從大段html中提取文本的實(shí)例
今天小編就為大家分享一篇Python使用get_text()方法從大段html中提取文本的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Pandas?篩選和刪除目標(biāo)值所在的行的實(shí)現(xiàn)
本文主要介紹了Pandas篩選和刪除目標(biāo)值所在的行的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Django rest framework工具包簡單用法示例
這篇文章主要介紹了Django rest framework工具包簡單用法,結(jié)合匿名訪問控制的具體實(shí)例分析了Django rest framework工具包的注冊、路由設(shè)置、視圖、權(quán)限控制、配置等相關(guān)操作技巧,需要的朋友可以參考下2018-07-07Python3如何將源目錄中的圖片用MD5命名并可以設(shè)定目標(biāo)目錄
這篇文章主要介紹了Python3如何將源目錄中的圖片用MD5命名并可以設(shè)定目標(biāo)目錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02