Python爬蟲之爬取內涵吧段子(urllib.request)

引言

在寒假開始的時候就打算學習爬蟲了,但是沒有想到一入坑到現在還沒有出坑,說多了都是淚 T_T
我準備介紹的這個庫是我初學爬蟲時候用到的,比較古老,所以我只用了一兩次就轉向了requests了

urllib.request

這個庫在python2.7之中其實是被稱爲urllib2,但是到了python3之後這個庫就取消了,變成了urllib的一個內置了,當然啦,用法還是和之前的urllib2沒有什麼區別。
單純的使用urllib.request.urlopen()其實已經實現一些基本的請求了,不過如果一般要構建完整請求的時候一般要需要用上Request()函數,簡單的貼一下代碼。

req = urllib.request.Request(url,headers = headers)
response = urllib.request.urlopen(req)

而這裏的response就是服務器返回的請求了。

正則表達式

最終想想還是要講講正則表達式,正則表達式簡單粗暴,我一開始簡直迷上了正則的力量,哦,當然,後面在美麗的湯的和xpath的勾引下。。。咳咳咳
正則表達式我就不具體多講,大家可以去翻翻一些其他人的博客或者官方文檔查閱一下即可。
這裏有一篇不錯的他人的博客可以查閱的點擊這裏

實踐

單純的講解是非常枯燥無聊的,作爲一個熱好實踐的實踐黨,每一次學習必備的就是實戰,這次的實戰題目就是爬取內涵吧的小說段子。

準備

url = http://www.neihanpa.com/article/
python 版本 3.6.3
paltform:win32
使用模塊urllib.request、re、os

觀察將要爬取的網站

這裏寫圖片描述
不難發現其中的對應關係。
這裏寫圖片描述

開始敲我們的代碼

敲好了開頭,先輸出看看
這裏寫圖片描述
看上去效果不錯,但是輸出了一丟哈希值是什麼鬼?我們換一種編碼試試。
這裏寫圖片描述
成功的輸出了中文,好我們繼續接下來的工作,進行匹配。

正則匹配

經過觀察這一段在不斷的重複
這裏寫圖片描述

於是我把它copy到我的代碼裏去。

這裏寫圖片描述

看看輸出的結果,嗯看上去還不錯(因爲我比較懶,所以喜歡暴力的[\w\W]+?)

這裏寫圖片描述

該把我們要的取出來了,只要在需要的東西打小括號就好了。

這裏寫圖片描述

爲什麼要去除那個html呢?可能有人會問了,這個問題你只要點進去那一個段子,再看看它的url就明白了。

開始進行url的拼接

現在我們獲得了我們想要的了,我們開始拼接我們要的url,然後進行同樣的一波操作,在此我打算用一個txt文件來保存段子內容。
這裏寫圖片描述

好,我們輸出來看看。

這裏寫圖片描述

嗯,發現中間穿插了圖片,但是這不重要,我們並不需要圖片,然後我們再仔細觀察一下規則。

這裏寫圖片描述

發現出現了不少\r\n\t甚至還有\u3000,大家可能不知道什麼是\u3000,不知道大家知不知道\x20這個是ASCII中的空白格,那麼很簡單\u3000就是Unicode中的空格之一,然後我們發現最後一行並不是我們想要的,於是把它刪去。
再次輸出:

這裏寫圖片描述

發現已經差不多了,但是還是有些不完美。

這裏寫圖片描述

我們使用replace()函數將其去掉。

這裏寫圖片描述

好了,到了這裏基本就是實現了

最後附加

這時我又誕生想法了,我不想單單抓這一頁了,我想抓多幾頁了(人類的慾望果然時無限的@_@)
好,這個時候我們繼續觀察,
這裏寫圖片描述
到了第二頁變成了索檢二?再嘗試一下,果然如此,於是我們再寫個函數,拼接出頁數的url,然後再進行簡單的交互,讓用戶輸入起始頁和終止頁,也可以當每一頁保存完成的時候,輸出第幾頁保存完成.
這裏寫圖片描述

結語:

回頭看看自己一開始寫的代碼發現一開始的自己挺菜的。。。嗯。。。是真的,也幸好我的學習方式沒有錯誤,從最簡單的正則開始學習,然後後面才學bs4之類的,不然的話估計基礎不是那麼好。
想要完整的代碼可以點擊下面哦:
https://github.com/Don98/Don98.github.io/tree/master/spider_project
對了,忽然想起,如果有人問爲什麼os模塊我沒有用到,我還導入了的話,我的回答就是,本來想用來創建文件夾的,不過最後忘了用到而已。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章