Python實(shí)現(xiàn)的飛速中文網(wǎng)小說(shuō)下載腳本
1.JavaScript 加密什么的最討厭了 :-(
1).eval 一個(gè)不依賴外部變量的函數(shù)立即調(diào)用很天真,看我 nodejs 來(lái)干掉你!
2).HTTP 請(qǐng)求的驗(yàn)證首先嘗試 Referer,「小甜餅」沒(méi)有想像中的那么重要。
3).curl 和各命令行工具處理起文本很順手呢
4).但是 Python 也沒(méi)多幾行呢
2.Requests 效率比 lxml 自己那個(gè)好太多
3.progressbar 太先進(jìn)了,我還是自個(gè)兒寫(xiě)吧……
4.argparse 寫(xiě) Python 命令行程序必備啊~
5.string.Template也很好用哦
6.以下是主代碼啦,除了標(biāo)準(zhǔn)庫(kù)以及 lxml 和 requests,沒(méi)有的模塊都在無(wú)所不能的 winterpy 倉(cāng)庫(kù)里。其實(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)小說(shuō)')
parser.add_argument('url',
help='小說(shuō)首頁(yè)鏈接')
parser.add_argument('name', default='$name-$author.txt', nargs='?',
help='保存文件名模板(支持 $name 和 $author')
parser.add_argument('-s', '--start', default=1, type=int, metavar='N',
help='下載起始頁(yè)位置(以 1 開(kāi)始)')
args = parser.parse_args()
main(args.url, args.name, args.start-1)
- Python腳本實(shí)現(xiàn)下載合并SAE日志
- 編寫(xiě)Python腳本來(lái)實(shí)現(xiàn)最簡(jiǎn)單的FTP下載的教程
- 編寫(xiě)Python腳本批量下載DesktopNexus壁紙的教程
- 利用python寫(xiě)個(gè)下載teahour音頻的小腳本
- 使用python采集腳本之家電子書(shū)資源并自動(dòng)下載到本地的實(shí)例腳本
- Python實(shí)現(xiàn)多線程下載腳本的示例代碼
- 寫(xiě)一個(gè)Python腳本下載嗶哩嗶哩舞蹈區(qū)的所有視頻
- Python實(shí)現(xiàn)一鍵下載視頻腳本
- Python百度指數(shù)獲取腳本下載并保存
相關(guān)文章
Python tkinter庫(kù)實(shí)現(xiàn)登錄注冊(cè)基本功能
Python自帶了tkinter模塊,實(shí)質(zhì)上是一種流行的面向?qū)ο蟮腉UI工具包 TK 的Python編程接口,提供了快速便利地創(chuàng)建GUI應(yīng)用程序的方法,下面這篇文章主要給大家介紹了關(guān)于tkinter庫(kù)制作一個(gè)簡(jiǎn)單的登錄注冊(cè)小程序,需要的朋友可以參考下2022-12-12
pandas中std和numpy的np.std區(qū)別及說(shuō)明
這篇文章主要介紹了pandas中std和numpy的np.std區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
簡(jiǎn)單幾步教你學(xué)會(huì)Python接口自動(dòng)化測(cè)試
這篇文章主要介紹了簡(jiǎn)單幾步教你學(xué)會(huì)Python接口自動(dòng)化測(cè)試,本文從一個(gè)簡(jiǎn)單的登錄接口測(cè)試入手,一步步調(diào)整優(yōu)化接口調(diào)用姿勢(shì),期望讀者可以通過(guò)本文對(duì)接口自動(dòng)化測(cè)試有一個(gè)大致的了解,需要的朋友可以參考下2023-08-08
初學(xué)者學(xué)習(xí)Python好還是Java好
在本篇文章里小編給大家分享的是關(guān)于初學(xué)者學(xué)習(xí)Python好還是Java好的相關(guān)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-05-05

