Python(讀音:派森),是屬於物件導向、直譯式的電腦程式語言,由 Guido van Rossum 所開發,於1991年被公開出來,當時目標是非專業程式設計師也能輕鬆使用的程式語言,如今發展到第三代已經算是當今流行的一種程式語言之一。

  在下雖然比較喜歡C/C++,有明確的參數型別定義跟強大的指標(Point),不過卻也不討厭這種直譯式,很直覺、很好懂的程式語言。它的程式撰寫需求門檻很低,你只要把官方直譯器安裝到電腦裡,並設定好環境變數,就可以在「命令提示字元」(cmd) 下直接寫程式並執行它,而要跑一個完整的程式,也僅只需要開一個純文字檔把程式碼寫進去並改副檔名為 .py 就可以用 cmd 下指令 "python xxx.py" 去執行它了。

 

Python LOGO  

Python官方網站

(2.x 版本的程式碼不能跟3.x版本的程式碼相容)

 

  網路爬蟲的第一步驟就是連到目標網站,所以你需要知道目標網址,而通常在下會搭配 Chrome 去觀察該網站的網路運作。

  得到網址後就是要去連它:

 

import requests

res = requests.get("https://www.ptt.cc/bbs/Gossiping/index.html", verify=False)

 

  這邊 requests 是別人寫好的簡易 HTTP library,需要到 這裡 去把它下載回來並安裝到你的 Python 上。

 

print(res.text)

 

  這樣就可以把抓回來的網頁原始碼秀出來看了。

  不過由於這樣的原始碼並不適合人類閱讀,所以會再搭配 html / xml 剖析器,來把重點擷取出來,我們關心的也就只有部分重要資訊而已,那一堆 html TAG 都是無用的垃圾資料。

 

from bs4 import BeautifulSoup

soup = BeautifulSoup(res.text)

 

  一樣的這邊需要再去抓另一個 library,請到 這裡 下載並安裝,另外更多的 API 使用,請參考官方的介紹:中文官網文件

 

 

  順道一提,在下用 Python3 試寫這個網路爬蟲的時候有遇到唯一一個讓在下覺得挺難搞的問題,那就是中文的 windows「命令提示字元」(cmd) 編碼預設是:cp950 ,而 Python3 的預設程式碼編碼是:utf-8 (cp65001),另外通常網頁的編碼也是 utf-8 (cp65001),這時候就很有可能在執行 print() 指令時出現 「UnicodeEncodeError: 'cp950' codec can't encode character ... ...」的錯誤,進而導致程式腳本執行中斷。

 

  這裡有兩個解決方法:

一、 改「命令提示字元」(cmd) 的編碼,執行 "chcp 65001",硬改「命令提示字元」(cmd) 的編碼成 unicode (UTF-8),這樣它就不會在輸出文字時需要轉換了,不過這對要封裝程式給別人用的人是一個很大的麻煩,因為並不是每個使用者都有足夠的能力去改這東西。

二、 使用 encode 的 replace 功能,把文字改成 "cp950" 的編碼,同時把 "cp950" 不認識的字替換掉 (變成 '?' ),這之後再把它用 "cp950" decode 回去就可以了。

 

  通常在下會比較喜歡用第二種解法,因為這樣就一勞永逸。

 

import sys

print(text.encode(sys.stdin.encoding, "replace").decode(sys.stdin.encoding))

 

  其中,還會使用 sys.stdin.encoding 來取得當前的 cmd 語系編碼來進行解析,不過再已知作業環境的編碼情況下,這個就是多此一舉了。

 

 

清單列表 = []

 

  而因為 Python3 的預設程式碼編碼是:utf-8,所以可以在程式碼中直接使用中文當參數名稱,這點讓在下覺得相當開心,因為這樣不僅識別率高,也不用在特別花腦筋想參數英文名,真是一舉數得啊!

 

  最後下面連結是在下打發無聊時間試寫的《八卦板爬蟲》程式碼:

八卦板爬蟲.py

 

  如果想讓別人在沒有安裝 Python 直譯器的電腦跑你的 code 的話,就要把它封裝成 exe 檔,下面的腳本是給有裝 cx_Freeze 的人測試封裝在下寫的 "八卦板爬蟲.py" 用的。

setup.py

 

  在下寫的這支並不算是一個完整的網路爬蟲,因為它沒有收集並儲存資料,而且還要使用者手動輸入指令,正常的網路爬蟲應該會像病毒一樣,自己找超連結跟網路重點並且一一儲存寫成檔案備份起來,這就當作給各為看倌的回家功課囉~ 要是有以此為基本寫出很強大的網路爬蟲的話,不妨回來展示給在下看看

創作者介紹

折翼之流

G毛 發表在 痞客邦 PIXNET 留言(2) 人氣()


留言列表 (2)

發表留言
  • Matt
  • 感謝解答,編碼問題應該也可以找IDE不然就只好在Ubuntu上開發
  • 訪客
  • 我用Windows python 2.7
    遇到中文就死了