2015年9月25日 星期五

Python Crawler(網路爬蟲) 概念介紹以及環境建置

今天來介紹Crawler(網路爬蟲)是什麼?  它是個方便我們蒐集網路資源的技術...

至於起源並不是本篇的重點,就不詳談了  有興趣的話請看參考資料1


在進入主題前 先來介紹一些基本環境

電腦環境

作業系統:Windows7 

程式語言:Python 2.7

瀏覽器:Google Chrome


了解之後 廢話不多說 馬上進入正題

網路爬蟲運作的基本原理

模擬用戶使用瀏覽器輸入網址並透過HTTP協定中的GET方法送出一個請求(Request)到遠端的伺服器(Server),伺服器接受請求後,就會回應(Response)並回傳網頁內容(原始碼)的檔案回來,再經由瀏覽器轉譯後變成漂亮的網頁。


(Crawler運作原理)


對於Crawler而言,它看到並不是漂亮的畫面而是網頁原始碼,那麼我們要如何知道網站是用什麼方法送出請求 


Chrome瀏覽Google網站為例


1.在網頁上按F12 叫出開發者人員工具

2.在上面的頁籤看到Network

3.按F5重新整理頁面

4.看到結果 請求是用GET方法送出


(開發者人員工具觀測結果)



原理明白之後 就開始進入實作的階段,即用Python實際地寫出一個簡單的Crawler 

驗證理論是否正確 這樣才有感覺的...




安裝Python及相關套件在Windows上


一開始先安裝Python程式語言(廢話),就點下一步下一步就裝完了... (輕鬆帶過)


值得注意的地方是版本是用2.7.x 而不是3.x


為什麼? 根據大家在網路上的討論 我整理之後有兩個主要原因:

  1. 目前大部分的套件(Package),2.7.x在支援上較為完整,線上的教學文章也是最豐富的,反之3.x支援的Package少,支援度差且安裝上容易發生錯誤即不相容,教學文章自然就少。
  2. 依照學習趨勢來看,3.x會成為主流而2.7.x會逐漸被淘汰,目前2.7.x改版只是修正一些bug,將來就會停止更新,全力推廣3.x,其中較明顯的原因之一是2.7.x令人詬病的bug 在3.x得到改善,例如:2.7.x是用ASCII解讀程式碼,而3.xUTF-8,如果是預設以外的編碼就必須在第一行放置編碼聲明(encoding declaration),想了解編碼的細節請看參考資料4
結論:初學者的話建議學2.7.x 先把語言的特性摸熟有了基礎後,再跳3.x會較好且不會摔的太嚴重,那一開始就有其他程式語言經驗的人 就建議直接用3.x了。

套件來源

Python本身有著許多的套件可以使用,那這些套件都放在哪裡? 想當然是在網路上的某個網頁啦(廢話) 

Python官方有建立專門收集套件的網站,叫作PyPI(Python Package Index),想要找什麼套件

基本上都是從這裡開始尋找的。

(PyPI官方網站)


套件管理程式

這麼多套件,我要怎麼安裝並拿來運用或是哪天這個套件不符合需求,又要怎麼移除? 
在做程式開發時遇到這些問題要如何處理? 這時候管理套件這件事就顯得特別重要

管理套件程式簡單的講,就像是Windows控制台的新增移除工具一樣,有安裝、移除等功能。

以下就來介紹 easy_install  以及 pip 這兩個Python的管理套件程式怎麼用?

原本Python2.7.9版中沒有內建安裝 easy_install 和 pip
而這次的更新(2.7.10)就有內建,所以就不必再像之前一樣做繁雜的安裝動作,可以直接使用了(灑花),想知道詳細的指令和原由請看參考資料5。這裡就不詳述了。

以下是列出自己常用的指令:

easy_install



        1.安裝套件:
                easy_install  [套件名稱]

        2.移除套件:
                 easy_install -m [套件名稱]

        3.升級套件:
                 easy_install -U [套件名稱]

        4.列出使用範例: 
                 easy_install --help

pip

        1.安裝套件:
                 pip [套件名稱]

        2.移除套件:
                 pip uninstall [套件名稱] 
        
        3.列出所有已安裝的套件:
                 pip list
   
        4.升級套件:
                 pip install -U [套件名稱]
   
        5.列出使用範例
                 pip --help


這兩個都是管理套件程式那有什麼差別?

以下列舉自己用到現在的感想,細節請看參考資料6

1.pip能夠下載並自動安裝套件,easy_install只是下載下來,但是要手動下指令安裝套件。

2.pip的許多指令能夠自動化並且簡化許多功能,easy_install反之。

結論: 建議使用者在管理套件時,以 pip 為主,easy_install 為輔,因為 pip 仍持續開發中,有時候會發現某些套件無法使用 pip 安裝,但是卻可以用 easy_install 安裝。

如果使用 pip 及 easy_install 都無法安裝成功時。使用者不妨直接進入套件目錄,看該套件是否有提供 setup.py 檔案。按住Shift鍵點選滑鼠右鍵看到在此處開啟命令視窗,在命令列模式下輸入下列指令:

        python setup.py install

Python套件



這次的爬蟲需要用到三個套件 分別介紹一下:

Requests : 解析網路資源(URL)的套件。


Beautiful Soup4 : 解析HTML元素的套件。




lxml : 處理XML及HTML的編譯器套件



 下指令安裝套件
pip install lxml


pip install requests BeautifulSoup4


(安裝套件成功畫面)

驗證套件是否安裝成功,進入Python主控台輸入


import requests
from bs4 import BeautifulSoup


沒有錯誤訊息就代表安裝成功

                                    (驗證套件安裝成功畫面)


以上的內容都了解了 ,接著就可以嘗試撰寫一隻簡單的爬蟲


撰寫爬蟲

網站:某個知名的新聞網站(怕造成困擾不公佈)

用GET方法取得網頁


那GET方法是什麼?

廣義的來講就是HTTP協定的一種方法,不過這樣講沒人聽得懂甚至無感。

簡單的說明就像是明信片一樣,將內容寫在上面送出,那GET的方法也是一樣,將要送的內容寫在網址列上送出。想知道更清楚請看參考資料7

這裡將用前面章節提到的Requests套件實現GET方法並取得整個網頁的內容

Step1:
確認該網站是用什麼方法發出請求到遠端的伺服器,這部分可以用Chrome開發者人員工具來得知。

Step2:
知道網站是用什麼方法之後,撰寫程式碼取得網頁內容
以下為程式碼




如果我只要網頁裡的特定資訊 如:新聞標題、內文,而不是要整個網頁內容 要怎麼寫?

這時要使用Beautiful Soup4來解析網頁的DOM結構
透過指定特定的元素就可以取得我們要的新聞資訊,如果不知道DOM請看參考資料8 這裡就不介紹了...


開始實作



Step1:
用Chrome開發者人員工具確認該網站是用什麼方法

Step2:
撰寫程式碼取得特定的元素,以下為程式碼




最後來介紹可以幫助你提升撰寫爬蟲效率的好工具

1.Postman – REST Client:測試API的Chrome Extension。

細節請看參考資料3




2.Cmder:Windows平台最好用的cmd 

解決中文字重疊的問題

開啟 Cmder 的 Setting 視窗,取消勾選 Main console font 下的 Monospace。



3.InfoLite:用滑鼠標示出網頁的元素

使用教學:
https://www.youtube.com/watch?v=_zv0IXEQxMA




4.Jupyter:一個網頁介面的文字編輯器,並能夠在上面撰寫程式碼、建立檔案以及執行檔案



安裝教學:https://www.youtube.com/watch?v=xWICyTVSIQs


進階操作:https://www.youtube.com/watch?v=lWkcP4xF8wI



下節將介紹在不同情況下爬蟲如何收集資料的概念及應用...


參考資料


2015年8月22日 星期六

Sublime Text3 開發環境快速建置

近幾年來,網站開發變得熱門,且相關的工作需求和職缺也越來越多,而我也想了解網站是如何運作以及建置,畢竟現在大家都是使用瀏覽器連上網站完成各自不同的需求 所以我想玩看看網站開發這領域。

那麼進到這領域,對於新手來講,還是要有一個開發環境,那我選擇的是Sublime Text3這個編輯器...

廢話不多說 接下來進入正題 開始來介紹基本安裝、設定、使用教學

首先安裝的部分,開發者只要按照自己電腦並且挑選對應的作業系統安裝即可 就不多談了

裝好之後,就要安裝管理許多套件的管理員Package Control 這可以讓Sublime變得更好用
安裝步驟如下:


Step1:開啟Sublime Text3主程式,點擊View/Show Console或是快捷鍵Ctrl+`叫出主控台


Step2:直接複製貼上Package Control網頁上提供的指令在主控台,直接按Enter就執行,就安裝完畢了,之後按ESC鍵離開主控台




Step3:發現Package Control選項出現選單裡 點擊Preferences/Package Control



到此Package Control已經安裝完畢,接下來就來用看看它到底有多好用


那在開啟Package Control之前,我先用一張圖來介紹它的常用指令 
這是截圖於某位前端高手的PPT,想了解的可以看參考資料



開啟Package Control或按快捷鍵Ctrl+Shift+P,主畫面如下:



用Package Control安裝套件

按下Install Package或是輸入inst 進到如下圖的畫面,在輸入框中輸入套件名稱按Enter就開始安裝套件



強烈建議安裝的套件清單:
  1. Emmet(建置原始碼超快)
  2. AutoFileName(自動抓取檔案路徑)
  3. ColorPicker(調色盤)
  4. jQuery(前端開發必用的函式庫)
  5. JS Snippets(自動產生常用的JavaScript 片段)
  6. LiveReload(瀏覽器自動重新整理)
  7. EJS(定義EJS語法)
  8. Sass(定義Sass語法)

試用套件:


使用Emmet快速產生HTML5網頁檔

!+Tab 就完成了!!!




使用ColorPicker挑選顏色:

按下快捷鍵Ctrl+Shift+C 跑出調色盤



其餘的套件 留待開發者自己去試就明白囉...

Sublime Text3 並不會自動排版 如果程式寫的太亂很難debug怎麼辦 別擔心

下面教你如何做到自動排版...

程式碼自動排版:

Step1:輸入關鍵字  auto format sublime text

Step2:第一個連結就是了

Step3:

點擊Preferences/Key Bindings - User 叫出空白的設定檔出來 
複製貼上網頁裡這行{ "keys": ["ctrl+shift+r"], "command": "reindent"}指令
按Ctrl+S存檔

注意:快捷鍵改為f12 這部分可以依照使用者習慣 



 到這裡友善的開發環境就建置完成了 ...


如果大家有好用的套件或是開發建議也可以提供哦 ^^


參考資料:

2015年3月20日 星期五

PHP XAMPP配置PHP環境和Apache80 Port被佔用 解決方案

某天,因為個人需要而去安裝Skype,發現我的Apache無法啟動,原來是Skype占用我的80 Port。這種情況對許多開發者來說,相信一定是很常遇到的問題

如下圖所示:


於是,我就去尋找一個解決方案,經過多次的尋找與思索,決定採取最簡單最有效的方案

那就是將Apache的80 Port改成其他Port

在這裡 我只分享解決問題的做法

至於想深入了解此問題的原由 可以參閱參考資料 或是拜求Google大神 滿足自己的好奇心

以下就來分享 我的做法:

Step1: 開啟 XAMPP Control Panel 點擊Apache(httpd.conf)

Step2: 彈出一個httpd.conf的記事本文件 修改裡面的組態內容 並儲存
(Ctrl+F 搜尋Listen 80 =>80改成8080)

(搜尋ServerName localhost: 80 =>80改成8080)

Step3: 在XAMPP Control Panel 點擊Start 發現正常啟動  對應的Port 也被改成8080

Step4:測試網頁是否能正常訪問 網址列鍵入 localhost:8080/xampp/index.php

能看到XAMPP首頁的畫面 代表成功

注意:因Port已經被修改,往後要開發網頁時,localhost後面必須要加入對應的Prot (這裡是8080)
才能正常訪問


每次重開機後發現一定要進去XAMPP Control Panel,手動啟動Apache,才能run服務,這就意謂著每次都要手動去啟動,難道不能開機時讓Apache自動啟動 答案是可以 如以下步驟:

Step1: 開啟XAMPP Control Panel

Step2: 點擊面板上Apache左邊的有打叉的方格

Step3:彈出對話框,詢問是否要安裝Apache服務 點擊Yes

Step4:面板上Apache左邊的方格變成打勾的方格 狀態列也顯示安裝成功


Step5:啟動Apache 


之後重開機測試 如果可以run服務的話 就沒問題了

參考資料:
(1)PHP XAMPP配置PHP環境和Apache80端口被佔用解決方案


2015年3月15日 星期日

用 PHP 存取 SQL Server2012 (使用XAMPP 5.5.19)

由於最近要做Web專案需要用到,所以自己就Survey一下
以下分享我找到的方法:

--------------------------------------------------------------------------------------------------------------------------

STEP.1 安裝XAMPP 5.5.19

STEP2. 前往 Microsoft for PHP connect SQL Server 下載補丁


 (如上圖,點選Download)


( SQLSRV30.EXE 是 PHP5.3 ~PHP5.4 版本的補丁
  SQLSRV20.EXE 是 PHP5.2 ~PHP5.3 版本的補丁

  SQLSRV31.EXE 是 PHP5.4 ~PHP5.5 版本的補丁
  SQLSRV32.EXE 是 PHP5.4 ~PHP5.6 版本的補丁


  由於我安裝的 XAMPP  5.5.19 內建 PHP5.5.19,所以下載 SQLSRV32.EXE )


STEP3. 安裝補丁 (其實只是把檔案解壓縮,隨便選個空資料夾 暫放) 

STEP4. 將補丁「php_sqlsrv_55_ts.dll」與「php_pdo_sqlsrv_55_ts.dll」複製到以下路徑內
  • C:\xampp\php\ext  如下圖所示:


STEP5. 開啟  php.ini   ( C:\xampp\php\php.ini )

在最底下加入這兩行 →儲存檔案

extension=php_sqlsrv_55_ts.dll
extension=php_pdo_sqlsrv_55_ts.dll 

如下圖:

STEP6. 重新啟動Apache服務  (預設是開啟,必須手動停止 再重新啟動)

( 如圖,開始 → 搜尋程式與檔案 → 鍵入'"xampp" → 點選「XAMPP Control Panel」) 


  • XAMPP Control Pancel 主畫面  並執行方才講的動作 如下圖所示:


STEP7. 確認安裝成功
用瀏覽器開啟  http://localhost/xampp/phpinfo.php
查看是不是有 sqlsrv 字樣 (可以用Ctrl+F 搜尋),有找到代表成功



STEP8. 前往 Microsoft® ODBC Driver 11 for SQL Server® - Windows 下載補丁


 (如上圖,點選Download)

(依據自己電腦的環境下載對應的版本)
(x64=>64位元  x86=>32位元)

  • 安裝畫面:
 ( 如上圖 點擊Next)

 ( 如上圖 先勾選I accep the terms in the license agreement 再點擊Next)

  ( 如上圖說明 這裡不做任何動作 點擊Next)

 ( 如上圖 點擊Install)

 (正在安裝中 需等幾分鐘)

 ( 如上圖 點擊Finish 完成安裝)

STEP9. 撰寫一隻 PHP程式,測試是否連線

如果輸出 Connection established 代表連線成功 !!

參考資料: