爬蟲學(xué)習(xí)5:如何從一個(gè)小說網(wǎng)站中爬出小說內(nèi)容到本地

? 第一步:引入爬蟲利器包

首先,我們需要引入requests和BeautifulSoup包來讓我們獲取到數(shù)據(jù),而在使用BeautifulSoup中底桂,一般會提示需要在函數(shù)()中添加features="html5lib"植袍,所以我們也引入html5lib。

引入庫

灰色的部分即在整個(gè)代碼里沒有被使用到的籽懦,至于為什么html5lib呈灰色于个,小白我也不太明白。

第二步:我們先定義一個(gè)類

這個(gè)習(xí)慣要掌握好暮顺,這是讓我們有面向?qū)ο蟮乃季S厅篓,而不是直接面對過程。也便于以后一層一層嵌套的繼承捶码。不會丟在一起亂七八糟贷笛。然后我們在這個(gè)類的初始化函數(shù) def __init__中,我們可以定義一些類里面的全局變量宙项。我們這里面以縱橫中文網(wǎng)的一篇小說《大俠蕭金衍》為例。鏈接地址:http://book.zongheng.com/showchapter/779260.html

定義class并初始化

第三步:我們需要看看這個(gè)小說有多少章節(jié)株扛,并把每個(gè)章節(jié)的名字給爬取出來

在類里面尤筐,我們定義一個(gè)函數(shù)為Geturlandtitle,我們在這個(gè)函數(shù)里面實(shí)現(xiàn)獲取每一章節(jié)的名稱和跳轉(zhuǎn)的url洞就,以備下個(gè)函數(shù)獲取每一章節(jié)里面的文本盆繁。老套路,先用requests.get()獲取到代碼旬蟋,并使用 .text 輸出為str油昂,然后輸入給BeautifulSoup,根據(jù)標(biāo)簽來獲取內(nèi)容倾贰。由于一個(gè)網(wǎng)站往往是各種標(biāo)簽層層嵌套冕碟,所以最好多使用BeautifulSoup中的 find/find_all 來逐步精確定位到數(shù)據(jù)源的代碼塊。我們這里先精確到帶有 class = ‘col-4’ 的 <li> 標(biāo)簽匆浙,然后再精確到它下面包含的 <a> 標(biāo)簽安寺。在此需注意,BeautifulSoup返回回來的是一個(gè)bs4的玩意兒首尼,我們需要用find_all函數(shù)把想要的標(biāo)簽給找出來挑庶,然后再把結(jié)果用str()轉(zhuǎn)成BeautifulSoup可以認(rèn)識的,重復(fù)软能。

定位章節(jié)鏈接和章節(jié)名稱

最好find_all函數(shù)返回的是一個(gè)<a>標(biāo)簽的list迎捺,那么此時(shí)我們需要for...in這個(gè)list,在這里需要提到查排,如上圖凳枝,我們是直接 for each in SecondA,那么每一次循環(huán)是雹嗦,each其實(shí)是被SeacondA[0]范舀,SecondA[1]這些給賦值合是,而不是從0到SecondA的最后一個(gè)索引數(shù)。因?yàn)楝F(xiàn)在Python是面對對象了锭环。還需要實(shí)現(xiàn)以前那種效果的話聪全,需要這樣寫:

繼續(xù)我們的爬蟲旅程,循環(huán)的用get去獲取每個(gè)<a>標(biāo)簽中的內(nèi)容辅辩,get()是要看<a>標(biāo)簽中有些什么难礼。獲取后再推入剛才初始化過的對應(yīng)空集合中。

第四步:我們通過上面獲取到的url來獲取每個(gè)章節(jié)中的內(nèi)容

我們假設(shè)上一個(gè)函數(shù)已經(jīng)把每個(gè)章節(jié)跳轉(zhuǎn)的url都推入了self.url這個(gè)list中玫锋,然后我們對這個(gè)list進(jìn)行for循環(huán)蛾茉,然后跟上面的操作類似,逐步的提取對應(yīng)章節(jié)中的文本文件撩鹿。然后print出來看看是否有些不需要的空格啊谦炬,沒用的文本信息之類的,使用函數(shù)移除掉节沦。然后同理把內(nèi)容塞入初始的空list中键思。

獲取每章節(jié)的正文內(nèi)容

第五步:把爬出來的數(shù)據(jù)寫入對應(yīng)文件。這里我們以txt為例

write寫入本地文件

首先我們定義一個(gè)writer函數(shù)甫贯,初始化函數(shù)的輸入變量為(name吼鳞,path,content)叫搁,name是小說章節(jié)名稱赔桌,path是小說爬出來的數(shù)據(jù)寫到本地文件的路徑,content是小說章節(jié)下的內(nèi)容渴逻。write_flag = True 這個(gè)不知道有啥用疾党,似乎刪除后也不會報(bào)錯,也能正常運(yùn)行并輸出結(jié)果txt裸卫,暫且不管仿贬。然后我們使用with open ... as...,這里有兩個(gè)知識點(diǎn):1:open和with open ... as的區(qū)別墓贿,2:文件打開模式的選擇茧泪。

1、open和with open ... as的區(qū)別

file = open("test.txt","r")

for line in file.readlines():

? ? print line

file.close()

? ? open需要在最后加一個(gè)close()語句聋袋,而且如果出現(xiàn)了異常队伟,就無法關(guān)閉對象。而with open的好處在于幽勒,如果出現(xiàn)了異常嗜侮,也會自動關(guān)閉,還不用寫close()語句。

2锈颗、文件打開模式

引用于“https://www.cnblogs.com/operaculus/p/5680850.html”

我們因?yàn)槭且崛∷械奈恼聝?nèi)容顷霹,所以我們需要用‘a(chǎn)+’的模式。我們的代碼如下:

準(zhǔn)備寫入函數(shù)

最后一步:我們實(shí)例化這個(gè)類击吱,然后調(diào)用它的各個(gè)函數(shù)淋淀,最終使用writer函數(shù)寫入本地的txt中。

這里有幾個(gè)點(diǎn)需要注意:

1覆醇、if __name__=='__main__’:這個(gè)代表著整個(gè)代碼塊從這里開始執(zhí)行朵纷,而不是去執(zhí)行上面class中的內(nèi)容

2、dl = Downloader()永脓,是實(shí)例化了這個(gè)類

3袍辞、Python默認(rèn)是單線程的,所以我們看到 dl.Geturlandtitle() 以及 dl.GetContent()是不會出現(xiàn)異步的問題的常摧。

今天的筆記結(jié)束搅吁,放出小小成果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市落午,隨后出現(xiàn)的幾起案子似芝,更是在濱河造成了極大的恐慌,老刑警劉巖板甘,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異详炬,居然都是意外死亡盐类,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門呛谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來在跳,“玉大人,你說我怎么就攤上這事隐岛∶睿” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵聚凹,是天一觀的道長割坠。 經(jīng)常有香客問我,道長妒牙,這世上最難降的妖魔是什么彼哼? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮湘今,結(jié)果婚禮上敢朱,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好拴签,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布孝常。 她就那樣靜靜地躺著,像睡著了一般蚓哩。 火紅的嫁衣襯著肌膚如雪精续。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天箍铲,我揣著相機(jī)與錄音拨齐,去河邊找鬼。 笑死盛嘿,一個(gè)胖子當(dāng)著我的面吹牛洛巢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播次兆,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼稿茉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了芥炭?” 一聲冷哼從身側(cè)響起漓库,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎园蝠,沒想到半個(gè)月后渺蒿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彪薛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年茂装,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片善延。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡少态,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出易遣,到底是詐尸還是另有隱情彼妻,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布豆茫,位于F島的核電站侨歉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏揩魂。R本人自食惡果不足惜为肮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肤京。 院中可真熱鬧颊艳,春花似錦茅特、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至重斑,卻和暖如春兵睛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窥浪。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工祖很, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漾脂。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓假颇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骨稿。 傳聞我的和親對象是個(gè)殘疾皇子笨鸡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容