筆趣閣小說爬取工具【附源碼】,來自論壇用戶原創(chuàng)制作分享的一款小說爬取工具,由Python編寫,同時(shí)附上了源碼資源方便大家瀏覽。筆趣閣小說爬取工具可以免費(fèi)爬取下載網(wǎng)站小說資源,讓您輕松獲取想看的小說。使用前請(qǐng)參考相關(guān)說明,避免出現(xiàn)錯(cuò)誤。
筆趣閣小說爬取工具使用
程序運(yùn)行方法:解壓,在本文件夾中找到并打開dist文件夾,有一個(gè)“筆趣閣小說下載.exe”,雙擊運(yùn)行
1、前往http://www.xbiquge.la/,找到要保存的小說,復(fù)制那個(gè)小說的目錄頁鏈接
2、按要求輸入鏈接地址和小說名
3、爬取開始
(因?yàn)槭菃尉程運(yùn)行,爬取速度略慢大概1-2秒一章)
4、爬取結(jié)束后,會(huì)將所有章節(jié)內(nèi)容整合成一個(gè)txt文件
筆趣閣小說爬取工具源碼
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'
}
#定義全局變量,用于保存所有獲取到的小說內(nèi)容
story_all = []
#獲取標(biāo)題及章節(jié)鏈接地址
def main():
url = input("請(qǐng)輸入小說目錄頁地址(暫時(shí)僅支持‘http://www.xbiquge.la/’站內(nèi)小說):")
book_name = input("請(qǐng)輸入小說名稱:")
print("-----爬取開始-----")
#獲取目錄頁的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]}')
#小說爬取完畢,開始保存
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é)頁的HTML文本
text = requests.get(url,header).content.decode('utf-8')
#因?yàn)橹皩戇^直接爬取所有內(nèi)容的,爬取出來的文本都帶有\(zhòng)r不好處理
#所以就一句一句的獲取了
story_content = re.findall(r' (.*?)<br',text,re.DOTALL)
#因?yàn)檎鹿?jié)名中有“”空格,沒辦法作為文件名,所以把空格去掉
title = re.sub(' ','-',title)
#有時(shí)候不知道為什么小說內(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é)名稱和章節(jié)內(nèi)容保存為一個(gè)字典
this_story = {
"title":title,
"story":story
}
print(this_story['title'])
#將字典添加到開頭定義的全局變量中
story_all.append(this_story)
if __name__ == "__main__":
main()