我用手機(jī)寫了一個Python爬蟲,爬下了《凡人修仙傳》……

前言

舞劍很喜歡閱讀網(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者祖, 即可免費獲取。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绢彤,一起剝皮案震驚了整個濱河市七问,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茫舶,老刑警劉巖械巡,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饶氏,居然都是意外死亡讥耗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門疹启,熙熙樓的掌柜王于貴愁眉苦臉地迎上來古程,“玉大人,你說我怎么就攤上這事皮仁〖眨” “怎么了菲宴?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵贷祈,是天一觀的道長。 經(jīng)常有香客問我喝峦,道長势誊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任谣蠢,我火速辦了婚禮粟耻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘眉踱。我一直安慰自己挤忙,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布谈喳。 她就那樣靜靜地躺著册烈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪婿禽。 梳的紋絲不亂的頭發(fā)上赏僧,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天大猛,我揣著相機(jī)與錄音,去河邊找鬼淀零。 笑死挽绩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驾中。 我是一名探鬼主播唉堪,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肩民!你這毒婦竟也來了巨坊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤此改,失蹤者是張志新(化名)和其女友劉穎趾撵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體共啃,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡占调,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了移剪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片究珊。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纵苛,靈堂內(nèi)的尸體忽然破棺而出剿涮,到底是詐尸還是另有隱情,我是刑警寧澤攻人,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布取试,位于F島的核電站,受9級特大地震影響怀吻,放射性物質(zhì)發(fā)生泄漏瞬浓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一蓬坡、第九天 我趴在偏房一處隱蔽的房頂上張望猿棉。 院中可真熱鬧,春花似錦屑咳、人聲如沸萨赁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杖爽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掂林,已是汗流浹背臣缀。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留泻帮,地道東北人精置。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像锣杂,于是被迫代替她去往敵國和親脂倦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353