前言
↓
舞劍很喜歡閱讀網(wǎng)絡(luò)小說职员。
凡人修仙傳麻蹋,知北游,無限恐怖……等等焊切,優(yōu)秀的網(wǎng)絡(luò)小說很多扮授,為此,我在三年前創(chuàng)辦了一個推書公眾號@無夢解書荒专肪。
專門用來推薦我覺得好看的網(wǎng)絡(luò)小說刹勃。
小說爬蟲
起因
老書蟲一般有兩個煩心事,第一嚎尤,不知道看什么荔仁。第二,不知道去哪看芽死。
第一個乏梁,可以去找推書公眾號,以及各大榜單掃榜关贵。
第二個掌呜,就沒那么容易了。
翻開百度一搜坪哄,廣告橫行质蕉,彈窗關(guān)都關(guān)不完势篡,閱讀體驗差的一批。
這時候模暗,我們可以用 Python 爬蟲禁悠,將小說從網(wǎng)頁端爬取下來,整理成 TXT 文本兑宇,導(dǎo)入喜歡的閱讀APP觀看碍侦。
準(zhǔn)備
舞劍前面介紹了兩款 Python 集成開發(fā)環(huán)境,分別是 QPython 和? Pydroid 隶糕。
這一次瓷产,就用 Pydroid 來爬取小說。
獲得 Pydroid * 1
Python 爬蟲枚驻,必須要觀看源碼濒旦,從源碼中尋找需要的資源與文本≡俚牵可以直接用 Python 扒源碼尔邓,我這里建議用網(wǎng)頁源碼查看器,簡單直觀锉矢。 獲得 Alook瀏覽器 * 1
開始
1. 獲取小說地址
①我這里準(zhǔn)備爬取凡人流小說《凡人修仙傳》
②隨機(jī)選取網(wǎng)址:
m.9txs.com/book/61781.html
2. 分析源碼地址
①? 首先爬取第一章《山邊小村》的文本內(nèi)容梯嗽,點進(jìn)去第一章,可以發(fā)現(xiàn)網(wǎng)址鏈接后綴改變了沽损。
m.9txs.com/book/61781/868469.html
多出了 /868469.html灯节。
②? 用Milk瀏覽器打開網(wǎng)址,運行腳本绵估,可以查看源碼显晶。
3. 爬取首頁 TXT 文本
① 爬取整頁源碼。
舞劍這里準(zhǔn)備使用 requests 庫壹士,大家記得安裝好磷雇。
首先自定義方法 get_one _page(),用來爬取源碼并返回給 main()? 方法躏救。
接下來唯笙,在? main()? 函數(shù)中輸出源代碼。
代碼如下:
import requests
#獲取首頁源碼
def get_one_page( url ):
? ? response = requests.get( url )
? ? return response.text
? ?
def main():
? ? url = 'http://m.9txs.com/book/61781/868469.html'
? ? html = get_one_page( url )
? ? print( html )
? ?
main()
②解析頁面盒使,篩選內(nèi)容崩掘。
首先,來看看正文部分究竟在源碼的哪里少办。
嗯苞慢,在 div id=“main”>……</d 中間。
章節(jié)標(biāo)題在 h1 class=“headline”> </h1
正文內(nèi)容在 div class=“content”></div 至于作者與書名英妓,我們暫時不需要挽放。
③編寫代碼绍赛,提取內(nèi)容
這里準(zhǔn)備使用 lxml 庫來爬取正文,沒安裝的小伙伴記得先安裝辑畦,很方便的吗蚌。
首先,導(dǎo)入 lxml 庫的 etree 模塊纯出。
然后蚯妇,使用 etree 的 HTML() 方法來初始化源碼。
最后暂筝,使用xpath語法來抽取我們需要的內(nèi)容箩言。
這里,新建一個方法 parse_one _page() 用來爬取資源焕襟。
代碼如下:
#解析源碼陨收,提取正文
def parse_one_page( html ):
? ? html = etree.HTML( html )
? ? #標(biāo)題
? ? title = html.xpath('//div[@id="main"]/h1/text()')
? ? #正文
? ? content = html.xpath('//div[@id="main"]/div[@class="content"]//text()')
? ? print( title )
? ? print( content )
需要的內(nèi)容為 title(標(biāo)題) 和 content(正文)。
這里的代碼輸出后胧洒,會得到兩個數(shù)組畏吓,分別記錄著標(biāo)題和正文的內(nèi)容墨状。
內(nèi)容如下所示:
[‘第1章 山邊小村’]
[’\n\t’, ‘二愣子睜大著雙眼卫漫,直直望著茅草和爛泥糊成的黑屋頂,身上蓋 著的舊棉被肾砂,已呈深黃色列赎,看不出原來的本來面目,還若有若無的散發(fā)著淡 淡的霉味镐确“撸’, ‘\n’, ‘在他身邊緊挨著的另一人,是二哥韓鑄源葫,酣睡的十分 香甜诗越,從他身上不時傳來輕重不一的陣陣打呼聲∠⑻茫’, ‘\n’, ‘離床大約半丈 遠(yuǎn)的地方嚷狞,是一堵黃泥糊成的……’, ‘……’, ‘\n\t’]
可以看到,這兩個數(shù)組的確是我們需要的內(nèi)容荣堰。 那么床未,就剩下最終的一步,將 爬取的小說標(biāo)題和正文保存到 TXT 文本中振坚。
寫入文檔薇搁,保存為TXT||4
保存為 TXT 文本很簡單,只需要使用 Python 自帶的文件系統(tǒng)就可以了渡八。
這里先新建一個方法 write_txt()啃洋, 用來保存 TXT文本传货。
接著使用內(nèi)置方法,創(chuàng)建 txt 文件 凡人修仙傳.txt裂允,設(shè)置參數(shù)為 a+损离,表示可以追加內(nèi)容,最后使用 **write()**方法寫入即可绝编。
代碼如下所示:
#保存TXT文本
def write_txt( result ):
? ? with open( '/sdcard/凡人修仙傳.txt', 'a+' ) as f:
? ? f.write( result )
接下來僻澎,就是在 main() 方法中調(diào)用 **write_txt()**方法就行了,但這里有兩個問題:
① parse_one _page()方法返回的是列表(list)十饥,不能直接寫入到 TXT 文本中窟勃。
②列表正文(content)中,除了小說正文外逗堵,還包含了 “\n \t” 這些符號秉氧,必須要去除后再寫入 txt文檔,才不會影響閱讀體驗蜒秤。
取出標(biāo)題
我們先取出 title(標(biāo)題)中的內(nèi)容汁咏, title 中只有一個內(nèi)容,所以只需要使用下標(biāo)為0的中括號就能取出作媚,代碼如下所示:
write_txt( title[0] )
取出正文
接著要取出 content(正文)中的內(nèi)容攘滩, content 內(nèi)部包含了換行符(\n)和制表符(\t),它們散落在每一段文字的開頭與結(jié)尾纸泡,這里直接使用 join() 方法漂问,用 \n 將內(nèi)容連接為 str(字符串)。
代碼如下所示:
write_txt( '\n'.join(content) )
最終會在手機(jī)根目錄生成 凡人修仙傳.txt 文本女揭,打開后可以看到爬取的內(nèi)容一切正常蚤假。
后記
就這樣,用 Python 爬蟲爬下了凡人修仙傳第一章的內(nèi)容吧兔,是不是很簡單磷仰。
至于其他章節(jié)的內(nèi)容,留在下一節(jié)繼續(xù)寫境蔼。
另外灶平,源碼很簡單,總共也就30行欧穴,如果有需要的小伙伴民逼,記得關(guān)注我,后臺回復(fù):爬蟲01涮帘,獲取本次的代碼拼苍。
關(guān)于 Pydroid ,可以去翻翻我以前的文章,也可以后臺直接回復(fù):0003疮鲫, 免費領(lǐng)取吆你。
文中用到的 Alook,嫌麻煩的小伙伴可以用其他的 via 等瀏覽器取代俊犯,只要可以查看源碼就行妇多。
當(dāng)然,也可以后臺回復(fù):0008燕侠,或者直接回復(fù): Alook者祖, 即可免費獲取。