Python下載網(wǎng)絡(luò)小說(shuō)實(shí)例代碼
看網(wǎng)絡(luò)小說(shuō)一般會(huì)攢上一波,然后導(dǎo)入Kindle里面去看,但是攢的多了,機(jī)械的Ctrl+C和Ctrl+V實(shí)在是OUT,所以就出現(xiàn)了此文。
其實(shí)Python我也是小白,用它的目的主要是它強(qiáng)大文本處理能力和網(wǎng)絡(luò)支持,以及許多好用的庫(kù),不需要自己造輪子。而且真心比C方便?。ㄕ媸怯昧瞬胖溃?/p>
分析要獲取的網(wǎng)頁(yè)

我要獲取的主要是3個(gè)東西:
- 文章的標(biāo)題。<div id="title">正文 第一章 北靈院</div>
- 文章正文內(nèi)容。<div id="content" style="line-height: 150%; color: rgb(0, 0, 0);">
- 下一章的URL。<a href="11455541.html" rel="external nofollow" >下一頁(yè)</a>
還有就是注意網(wǎng)頁(yè)的編碼,這個(gè)網(wǎng)頁(yè)的編碼是GBK,但在實(shí)際運(yùn)行過(guò)程中,我用GBK會(huì)出現(xiàn)網(wǎng)頁(yè)解碼錯(cuò)誤:
UnicodeDecodeError: ‘gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence
所以換用了gb18030,問(wèn)題就解決了,因?yàn)橐话阈尴删W(wǎng)絡(luò)小說(shuō)中,會(huì)出現(xiàn)各種王霸之氣的文字,你們懂得,所以需要更加牛逼文字庫(kù),你們感受一下博大精深的字符編碼。

源代碼
我就知道,大家要這個(gè),哈哈哈。
主函數(shù)
#主函數(shù)
if __name__ == '__main__':
global numChapter
global NOVERL
NOVERL = '大主宰.txt'
#NOVERL = '擇天記.txt'
NOVERL = '武動(dòng)乾坤.txt'
if(NOVERL == '大主宰.txt'):
textStartURL = 'http://www.bxwx8.org/b/62/62724/11455540.html';#大主宰第一章的URL
textStartURL = 'http://www.bxwx8.org/b/62/62724/28019405.html';#第一千兩百三十七章 鬼大師
else:
textStartURL = 'http://www.bxwx8.org/b/98/98289/17069215.html';#擇天記第一章URL
textStartURL = 'http://www.bxwx8.org/b/98/98289/28088874.html';#擇天記第七十八章 合劍術(shù)
textStartURL = 'http://www.bxwx8.org/b/35/35282/5839471.html';#武動(dòng)乾坤第一章
#textStartURL = 'http://www.bxwx8.org/b/35/35282/7620539.html';#武動(dòng)乾坤
nextURL = textStartURL;
isEnd = False
f = open(NOVERL, 'w', encoding='utf-8')
f.close()
numChapter = 0;
while(not isEnd):
nextURL,isEnd = findNextTextURL(nextURL)
print('end of capture!')
print('獲取到 ' + str(numChapter) + ' 章')
獲取內(nèi)容和下一章URL
#找到 下一章節(jié)的URL
#獲取小說(shuō)內(nèi)容
def findNextTextURL(url):
global numChapter
global NOVERL
#如果nextURL == endURL 則返回false
if(NOVERL == '大主宰.txt'):
endURL = 'http://www.bxwx8.org/b/62/62724/index.html'#大主宰
headURL = 'http://www.bxwx8.org/b/62/62724/'#大主宰
else:
endURL = 'http://www.bxwx8.org/b/98/98289/index.html'#擇天記
headURL = 'http://www.bxwx8.org/b/98/98289/'#擇天記
endURL = 'http://www.bxwx8.org/b/35/35282/index.html'#武動(dòng)乾坤
headURL = 'http://www.bxwx8.org/b/35/35282/'#武動(dòng)乾坤
isEnd = False
resp = urllib.request.urlopen(url)
#處理的字符的確是gbk的,但是其中夾雜的部分特殊字符,
#是gbk編碼中所沒(méi)有的如果有些特殊字符是GB18030中有的,但是是gbk中沒(méi)有的。
#則用gbk去解碼,去所不支持的字符,也比如會(huì)出錯(cuò)。
#所以,此種情況,可以嘗試用和當(dāng)前編碼(gbk)所兼容的但所包含字符更多的編碼(gb18030)去解碼,或許就可以了。
#allHtml = resp.read().decode('gbk')#
allHtml = resp.read().decode('gb18030')#
textSoup = BeautifulSoup(allHtml)
#章節(jié)名
strChapter = textSoup.find(id='title').getText().split(r'【')[0]
strChapter = strChapter.split(r'(')[0]
strChapter = strChapter.replace('正文 ','') + '\n'
numChapter = numChapter + 1
strID = '#' + str(numChapter) + '-'
strChapter = strID + strChapter
strChapter = strChapter + '\n------------------------------\n' + url + '\n------------------------------\n'
#小說(shuō)正文
strNovel = textSoup.find(id='content').getText()
strNovel = strNovel.replace(' ','\n')
#除去正文中多余的第XXX章
strMatch = r"第[\u4e00-\u9fa5]+章"
list2replace = re.findall(strMatch, strNovel)
if list2replace:
str2replace = list2replace[0]
strNovel = strNovel.replace(str2replace, '')
#合并章節(jié)和正文
strNovel = strChapter + strNovel + '\n------------------------------\n------------------------------\n'
#寫到txt文件中
write2TXT(strNovel)
#獲取下一個(gè)章節(jié)的URL
nextURL = re.findall(r'var next_page = "[\w]+.html"', allHtml)[0]
nextURL = nextURL.replace(r'"', '')
nextURL = nextURL.replace(r'var next_page = ', '')
nextURL = headURL + nextURL
print(numChapter)#章節(jié)數(shù)
print(strChapter)#章節(jié)名字
print((nextURL))#下一章URL
if(endURL == nextURL):
isEnd = True
return nextURL,isEnd
寫入TXT
#寫到文本文件中 def write2TXT(txt): global NOVERL f = open(NOVERL, 'a', encoding='utf-8') f.write(txt + '\n\n') f.close()
結(jié)束語(yǔ)
三個(gè)說(shuō)明:
- txt文本的編排肯定不好,而且在Kindle里面無(wú)法自動(dòng)分章,多看閱讀可以,原生系統(tǒng)就GG了,所以下一步可以用epubBuilder這款軟件進(jìn)行二次編排,輸出mobi導(dǎo)入你的Kindle。
- 本程序只是針對(duì)這個(gè)網(wǎng)站而已,但是如果網(wǎng)站換了,細(xì)節(jié)性代碼就得重新寫了。不過(guò)大框架還可以用。
- 網(wǎng)絡(luò)小說(shuō)毒害有志青年,一入網(wǎng)文深是海,從此節(jié)操是路人,諸君且行且珍惜!
總結(jié)
以上就是本文關(guān)于Python下載網(wǎng)絡(luò)小說(shuō)實(shí)例代碼的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
- python 爬取小說(shuō)并下載的示例
- Python實(shí)現(xiàn)的飛速中文網(wǎng)小說(shuō)下載腳本
- Python爬蟲入門教程02之筆趣閣小說(shuō)爬取
- python爬取”頂點(diǎn)小說(shuō)網(wǎng)“《純陽(yáng)劍尊》的示例代碼
- Python scrapy爬取小說(shuō)代碼案例詳解
- Python爬取365好書中小說(shuō)代碼實(shí)例
- python爬蟲爬取筆趣網(wǎng)小說(shuō)網(wǎng)站過(guò)程圖解
- 用python給自己做一款小說(shuō)閱讀器過(guò)程詳解
- python設(shè)計(jì)微型小說(shuō)網(wǎng)站(基于Django+Bootstrap框架)
- 利用Python如何實(shí)現(xiàn)一個(gè)小說(shuō)網(wǎng)站雛形
- python 制作網(wǎng)站小說(shuō)下載器
相關(guān)文章
Python pickle類庫(kù)介紹(對(duì)象序列化和反序列化)
這篇文章主要介紹了Python pickle類庫(kù)介紹(對(duì)象序列化和反序列化),本文講解了pickle庫(kù)的作用、pickle的運(yùn)行過(guò)程、使用實(shí)例、修改picklable類型的默認(rèn)行為等內(nèi)容,需要的朋友可以參考下2014-11-11
Python學(xué)習(xí)筆記之Break和Continue用法分析
這篇文章主要介紹了Python學(xué)習(xí)筆記之Break和Continue用法,結(jié)合實(shí)例形式分析了Python中Break和Continue的功能、使用方法、區(qū)別及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-08-08
python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)原理解析
這篇文章主要為大家介紹了GCN圖卷積神經(jīng)網(wǎng)絡(luò)原理及代碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python的launcher用法知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于python的launcher用法知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2020-08-08
python實(shí)現(xiàn)布隆過(guò)濾器及原理解析
布隆過(guò)濾器( BloomFilter )是一種數(shù)據(jù)結(jié)構(gòu),比較巧妙的概率型數(shù)據(jù)結(jié)構(gòu)(probabilistic data structure),特點(diǎn)是高效地插入和查詢,可以用來(lái)告訴你 “某樣?xùn)|西一定不存在或者可能存在”。這篇文章主要介紹了python實(shí)現(xiàn)布隆過(guò)濾器 ,需要的朋友可以參考下2019-12-12
下載與當(dāng)前Chrome對(duì)應(yīng)的chromedriver.exe(用于python+selenium)
這篇文章主要介紹了下載與當(dāng)前Chrome對(duì)應(yīng)的chromedriver.exe(用于python+selenium),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01

