回覆列表
  • 1 # 募才網

    電影天堂的結構很簡單,拿來做練手專案很容易。實現一個簡單的爬蟲,前提是要理解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原始碼

  • 2 # Henney薑汁

    假設你已經知道html和網頁相關理論知識,並且具備一定的python基礎知識。

    可以使用pyspider,簡單學習和了解電影網頁結構即可快速爬取。我以前學習的時候拿電影天堂交過手

  • 中秋節和大豐收的關聯?
  • 李滄海和巫行雲和李秋水什麼關係?