November 18, 2016

ptt 爬蟲 with Python

即便經過十幾年,世界早已從無名小站經過Facebook,正演進到通訊軟體與chat bot的世界。台大批踢踢仍是台灣網路世界的熱門中樞,什麼最新最快最即時的資訊哪裡找不到,還是到批踢踢問鄉民最快。因應新的世界,也有好多好用的批踢踢手機app可以使用,滿足大家對資訊的需求。

好吧,廢話講太多(下略三千字)。今天要玩的是批踢踢的文章爬蟲。

Github上相關的程式碼很多,根據Readme挑了一個看起來合適的切入點。 https://github.com/jwlin/ptt-web-crawler 嗯,是Python。

在目前的Mac版本(10.12)已有內建Python2.7。直接跑起來卻一直出現error。胡亂安裝一陣相關套件,卻還是一直回報pyOpenssl相關錯誤。才知道原來在本機跑python還需要設定Virtual Environment才行。

根據說明,virtual environment是用來保持各專案的獨立性。解決了A專案需要版本 1.x 但 B專案需要 4.x 的這類問題。

可透過pip安裝。
$ pip install virtualenv


基本使用:
1. 在專案資料夾中建立virtual environment
$ cd my_project_folder
$ virtualenv venv

以上動作會在該資料夾中建立一個 venv 的資料夾。裡面會放Python的相關執行檔與一份用來安裝其他library的pip library。(venv也可使用其他名稱)(這資料夾在mac finder中看不到,是隱藏資料夾。)
也可以指定python interpreter
$ virtualenv -p /usr/bin/python2.7 venv

2. 使用以下指令啟動virtual env
$ source venv/bin/activate

當virtual env啟動時,會出現在提示符號右邊如:
(venv)Your-Computer:your_project UserName$

啟動後,任何使用pip安裝的套件會裝在venv中。
$ pip install requests

3. 如要關閉virtual environment
$ deactivate


接下來就可以開始玩囉~

基本上照說明執行就可以動了。以下依需求fork到我的Github上做了一點小修改。

原本設定參數 -i [起始頁] [終止頁] ,終止頁若設-1代表爬到最後。
不過因為我只需要爬最新幾頁,所以修改參數,若起始頁設定-1,則會往前數n頁再爬出來,參數這樣設 -i -1 n,就會爬該版的最後n頁文章內容。

目前大概這樣,有興趣的朋友可以到Github下載下來玩。

September 21, 2016

xcode 8 卡頓

從xcode 8 GM釋出以來,一直有一個卡頓的問題實在十分惱人。開啟xcode打沒兩個字就開始無限轉圈... @@。沒想到正式釋出之後問題仍然沒有解決。

還好搜尋之後找到解法。

不確定是否為xvim外掛的關係,總之照做之後就順利正常了。

參考文章:https://github.com/XVimProject/XVim/issues/966

解法就是,從"系統偏好設定">"安全性與隱私">"聯絡資訊" 將xcode取消勾選即可!

不知為何xcode需要取用聯絡資訊,不過果然關掉就正常了。

以上,給遇到相同問題的朋友參考~

September 9, 2016

為DEBUG build做不同的info.plist設定

開發專案總會遇到一些情況,比如說某些功能是debug用的,正式版並不要送出去。如果事事都用手動調整,那我們在做Release build時就會有一張落落長的check list。所幸大部分的功能只要設定Propressor Macro,在用#if區隔程式碼就可以自動區別。

但是就是這一個但是,iOS的某些功能是在info.plist中做設定的,不找一下,還真不知道該怎麼在build time讓它自動區分開來。比如說 UIFileSharingEnabled

查找了一下,可以參考這篇:Info.plist preprocessing

雖然Apple關著這扇門,但他也開了那扇窗。只要在Project Target的Build Setting中做以下設定,就可以囉!

1. 把 Preprocess Info.plist設為YES。(預設為NO)
2. 設定一個.h檔案,比如我用的是infoPlist.h,指定為Preprocessor Definitions檔案。這邊可以直接分為兩個檔案,或用#define做區隔,這就看各人喜好囉。
3. 最後在info.plist中再使用定義好的MACRO即可。