Python 的知識很多,基本的入門就有很多東西要學,還有各種合樣的庫要學習。很多同學學了一段時間,進展很慢,學了前面忘了后面!今天我就給大家介紹一個非常簡單的爬蟲小例子,來綜合練習,非常不錯!
作為一家“創(chuàng)意+整合+營銷”的成都網站建設機構,我們在業(yè)內良好的客戶口碑。成都創(chuàng)新互聯(lián)提供從前期的網站品牌分析策劃、網站設計、成都網站建設、成都網站設計、創(chuàng)意表現、網頁制作、系統(tǒng)開發(fā)以及后續(xù)網站營銷運營等一系列服務,幫助企業(yè)打造創(chuàng)新的互聯(lián)網品牌經營模式與有效的網絡營銷方法,創(chuàng)造更大的價值。1.爬取的目標
我們這次選擇一個比較好玩的網站叫"好奇心日報",里面的內容非常有趣,而且圖片都是高清,非常漂亮,今天我們就探索一下好奇心日報的爬取。
2.準備工作
前期需要對這個網站進行簡單的分析,網頁的結構,源碼的查看,有無反爬策略等等。
1)第一步是發(fā)現好奇心日報的文章地址編碼是按數字遞增的,例如: http://www.qdaily.com/articles/38425.html
2)截止今天,好奇心日報的文章編碼已經從1到55613了,共5萬篇文章。
3)然后我發(fā)現文章的標題,分享數和文章發(fā)布日期都寫死在頁面里,但是評論數不在頁面中 。
4)為了找到評論數,我使用谷歌瀏覽器的F12的 network 功能,發(fā)現了評論是通過json 數據獲得的,地址類似: http://www.qdaily.com/comments/article/38425/0.json 。
5)看到 json 的數據自帶評論,于是我順便把評論的內容也爬下來了,順便做一個評論的詞云
看個人資料,有Python資料
3.主體代碼
1)先創(chuàng)建數據庫
數據庫我們用選擇最最簡單的 sqlite3 ,這個數據非常適合小白入門。這個庫的詳細用法。
用一個類QDaily_DB來專門處理db的創(chuàng)建,保存和關閉.上面的代碼是創(chuàng)建部分:
1)創(chuàng)建一個數據庫名字叫qdaily.db,里面分布建2張表
2)一張表qdality用來保存好奇心日報的id,標題,點贊分享數,日期和評論數
3)一張表comments用來保存好奇心日報的id和每一條評論的內容
2)網頁爬取
網頁的爬取,我們這里并沒有用什么高深的庫和爬蟲框架,用簡單的requests+bs4的組合,這一個一套比較適合小白上手的庫,也沒有用并發(fā)框架。
1).網頁的下載
前面說了,好奇心日報的url的規(guī)則已經找到,只要一個一個解析就行!
我們輸入一個id,來構造一個url,然后把這個url填入到requests中解析即可。
注意編碼方式,獲得頁面的內容html_content,然后把詳細的html_content內容填入parse_html類函數中進行詳細處理.
為了防止出現爬取異常,一定要加入try/except和finally這樣的異常保護
3).頁面的解析和評論內容的獲取
下面就是這個項目稍微難有點的地方,需要用BeautifulSoup來詳細解析頁面的內容。
評論區(qū)的內容稍微有一點點的復制,需要用構造一個header取獲取,直接解析頁面無法獲取。
sqlite的操作非常簡單,用的也是SQL的語法,上手來說非常方便。我們用insert語句動態(tài)插入數據,然后execute去執(zhí)行,最后不要忘記commit!
05.:數據的展示
爬完5萬篇文章用了快一天,雖然多線程可以加快速度,但我采用單線程減輕好奇心日報服務器的壓力, 先是根據文章分享數排序:
然后是根據文章的評論數排序:
06:好奇心日報文章id與評論數的關系
感覺好奇心日報用的人越來越多了,那么隨著id的增加,文章的平均評論數應該也會增加。
可以看出越到后面,平均每篇文章的分享數就越多,反映出好奇心日報的用戶數變多
07:根據評論生成詞云
用matplotlib和wordcloud庫生成一個詞云評論圖,看看哪些關鍵字比較集中!
生成的詞云結果如下
發(fā)現評論比較多的是"哈哈哈","是的","呵呵","謝謝"這樣的短口語詞匯。整個這個實戰(zhàn)小例子還是非常有趣的,從數據爬取-數據入庫,數據分析和詞云,一條龍服務,還是非常值得去試試,對初學者強化基礎知識,入門比較有幫助。