回覆列表
-
1 # 募才網
-
2 # Henney薑汁
假設你已經知道html和網頁相關理論知識,並且具備一定的python基礎知識。
可以使用pyspider,簡單學習和了解電影網頁結構即可快速爬取。我以前學習的時候拿電影天堂交過手
假設你已經知道html和網頁相關理論知識,並且具備一定的python基礎知識。
可以使用pyspider,簡單學習和了解電影網頁結構即可快速爬取。我以前學習的時候拿電影天堂交過手
電影天堂的結構很簡單,拿來做練手專案很容易。實現一個簡單的爬蟲,前提是要理解http協議,什麼是request和response。其次是會用chrome,用chrome的開發者工具,獲取request,和response。
再然後,才是Python,Python的requests模組,re模組,以及使用這些模組過程中遇到的中文亂碼問題。
1.unicode和bytes
中文亂碼的問題,主要是區分Python的預設編碼,什麼是unicode,以及在cmd,shell,或者是Python命令列中編碼解碼的情況。
使用chardet工具可以更直觀的知道我們的字串的編碼型別。使用下載工具。
透過以上的嘗試,可以瞭解到python2中字串預設是Bytes型別,也可以指定unicode型別。理解了Bytes,和unicode,才可以順利的對字串進行轉換。Bytes型別透過可以解碼成unicode,unicode自然也可以透過編碼成Bytes。
2.Requests爬取網頁
作為中文使用者,在爬取網頁的過程中我們經常要與編碼解碼打交道,這是不可避免的。我爬取的網站是電影天堂,在爬取網頁的過程發現了一個費解的事情。
一開始我的思路是根據chardet提供的編碼資訊,對文字進行解碼unicode編碼utf-8的操作。對於GB2312的解碼編碼的結果沒有出現問題,但是對於ISO-8859-2的解碼編碼後,中文依舊是亂碼。
對於爬去的網頁,如果有特殊字元是會對chardet.detect的結果造成干擾。比較穩妥的方法是,根據網頁的提供的資訊進行強制解碼,即
在google後,我採取了上面的思路,對於爬去的網頁進行統一的解碼編碼,暫時未發現問題。
3.正則表示式
獲取到整個網頁資訊後,透過正則表示式可以精準的獲取的想要的資料。正則表示式博大精深,暫時也只學了個皮毛,配合python的re模組,這裡我只用到了re.compile以及re.findall兩個方法。
compile會得到一個re的物件,透過該物件再進行findall操作會更加的快速。當然也可以直接使用findall方法,要攜帶多一個引數。
電影天堂的列表採用這種風格的html。
4.demo原始碼