筆趣閣小說(shuō)爬取工具【附源碼】,來(lái)自論壇用戶(hù)原創(chuàng)制作分享的一款小說(shuō)爬取工具,由Python編寫(xiě),同時(shí)附上了源碼資源方便大家瀏覽。筆趣閣小說(shuō)爬取工具可以免費(fèi)爬取下載網(wǎng)站小說(shuō)資源,讓您輕松獲取想看的小說(shuō)。使用前請(qǐng)參考相關(guān)說(shuō)明,避免出現(xiàn)錯(cuò)誤。
筆趣閣小說(shuō)爬取工具使用
程序運(yùn)行方法:解壓,在本文件夾中找到并打開(kāi)dist文件夾,有一個(gè)“筆趣閣小說(shuō)下載.exe”,雙擊運(yùn)行
1、前往http://www.xbiquge.la/,找到要保存的小說(shuō),復(fù)制那個(gè)小說(shuō)的目錄頁(yè)鏈接
2、按要求輸入鏈接地址和小說(shuō)名
3、爬取開(kāi)始
(因?yàn)槭菃尉(xiàn)程運(yùn)行,爬取速度略慢大概1-2秒一章)
4、爬取結(jié)束后,會(huì)將所有章節(jié)內(nèi)容整合成一個(gè)txt文件
筆趣閣小說(shuō)爬取工具源碼
import requests
import re
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
}
#定義全局變量,用于保存所有獲取到的小說(shuō)內(nèi)容
story_all = []
#獲取標(biāo)題及章節(jié)鏈接地址
def main():
url = input("請(qǐng)輸入小說(shuō)目錄頁(yè)地址(暫時(shí)僅支持‘http://www.xbiquge.la/’站內(nèi)小說(shuō)):")
book_name = input("請(qǐng)輸入小說(shuō)名稱(chēng):")
print("-----爬取開(kāi)始-----")
#獲取目錄頁(yè)的HTML文本
text = requests.get(url,header).content.decode('utf-8')
#獲取每個(gè)章節(jié)的章節(jié)名
title = re.findall(r'<dd>.*?<a.*?>(.*?)</a>',text,re.DOTALL)
#獲取每個(gè)章節(jié)的鏈接地址
loca = re.findall(r"<dd>.*?='(.*?)' >",text,re.DOTALL)
#因?yàn)閠itle和loca的長(zhǎng)度相同,所以以索引的方式遍歷,方便取值
for i in range(len(title)):
content(title[i],f'http://www.xbiquge.la{loca[i]}')
#小說(shuō)爬取完畢,開(kāi)始保存
print("@"*500)
with open(r'%s.txt'%book_name, 'w',encoding='utf-8')as file:
#遍歷每一項(xiàng),按順序保存章節(jié)名和章節(jié)內(nèi)容
for story in story_all:
file.write(story['title']+'\n')
print(story['title'])
file.write(story['story'])
#解析章節(jié)內(nèi)容并保存
def content(title,url):
#獲取章節(jié)頁(yè)的HTML文本
text = requests.get(url,header).content.decode('utf-8')
#因?yàn)橹皩?xiě)過(guò)直接爬取所有內(nèi)容的,爬取出來(lái)的文本都帶有\(zhòng)r不好處理
#所以就一句一句的獲取了
story_content = re.findall(r' (.*?)<br',text,re.DOTALL)
#因?yàn)檎鹿?jié)名中有“”空格,沒(méi)辦法作為文件名,所以把空格去掉
title = re.sub(' ','-',title)
#有時(shí)候不知道為什么小說(shuō)內(nèi)容會(huì)爬取到一個(gè)空數(shù)組,所以這里添加了一個(gè)檢測(cè)程序
#如果爬取到的為空,就重新爬取,直到獲取到為止
if story_content==[]:
content(title,url)
return 0
story=""
#前面提到,因?yàn)槲沂且痪湟痪渑廊〉模赃@里做一下拼接,順便去空格
for story_contents in story_content:
story = story+story_contents.strip()+'\n'
#將章節(jié)名稱(chēng)和章節(jié)內(nèi)容保存為一個(gè)字典
this_story = {
"title":title,
"story":story
}
print(this_story['title'])
#將字典添加到開(kāi)頭定義的全局變量中
story_all.append(this_story)
if __name__ == "__main__":
main()