對python3 而言,亂碼不叫亂碼,叫做編碼錯誤
沒錯,python3 內所有的文字都是 unicode
類型的str,對於原本是utf-8 編碼的文字,再另外編成big5 後當然會出現亂碼
一般而言透過requests 訪問網頁的程式碼如下:
1 | # -*- encoding: utf8-*- |
對python3 而言,亂碼不叫亂碼,叫做編碼錯誤
沒錯,python3 內所有的文字都是 unicode
類型的str,對於原本是utf-8 編碼的文字,再另外編成big5 後當然會出現亂碼
一般而言透過requests 訪問網頁的程式碼如下:
1 | # -*- encoding: utf8-*- |
沒用過指標,別說你會 C / C++
看到最近朋友在找延替時被指標考題炸的淒淒慘慘,為了避免我之後面試時也被雷到,先把蒐集到常見的指標問題整理在下方。
何謂指標:
指標是一種資料類型,用來表示物件或者變數的記憶體位置
聽起來很難懂,直接用程式來輔助思考就比較清楚了:
1 | int a, b; |
Thread 爬蟲優化
前陣子介紹了如何把 Thread
應用在爬蟲上,今天要來介紹如何因應硬體資源來調整 Thread
的執行數量。
在上一篇教學中,筆者把每頁的查詢都新增一個 Thread
去處理,假設有100頁的話便需要100條 Thread
,若電腦硬體不夠強根本無法這樣處理,所以需要控管單一時間內允許執行的 Thread
數量。
想法如下:
Thread
可運行的數量Thread
檢查是否有爬蟲任務,若有則執行任務;若無則結束離開在Codeigniter 上開發了也快一年,前陣子被推坑來laravel,一試完果真回不去了,簡便的指令模式能快速地建立Controller、Model、View 及各種樣板,當下果斷放棄Codeigniter。
在這框架奔放的年代,Laravel 絕對是PHP後端框架最重要的角色沒有之一。
Thread 爬蟲應用
前面章節介紹的做法都是一步一步慢慢抓,以Level 2 為例
我們的做法是抓好第n 頁後再往第n+1 頁抓,但這樣的速度真的太慢了,一個時間點內只有送出一個http request 查詢,有沒有辦法是同個時間內送出多個http request?
當然是可以的,這就是我們這一章節要介紹的 Thread
這一關的網頁看起來類似 Level 2: 分頁處理
但是當你把Level 2 的程式重新執行時會發現每次都是跑第一頁,就算把每次送出request 時的PHPSESSID 固定住的話還是一樣,這時候我們便需要考慮網頁的另一個特性: header。
雖然這次的目標也是有分頁,但是當切換頁面時並不像Level 2一樣是:&page=nnn 的形式
反而是透過 &page={prev,next} 這兩種值來決定要上一頁或者下一頁
題目已經很好心的告訴你我們要透過Session 來處理這題,在開始前先來聊聊Session 是什麼吧。
Session 是一種儲存在伺服端的資料, 用於儲存用戶資訊
以買飲料來舉例:
- A 在飲料店點了一杯飲料
- 店員發給了A 一張號碼牌(cookie) 並且記住A 點了什麼飲料 (session)
- A 拿號碼牌(cookie) 給店員,並且詢問飲料狀況
- 店員透過號碼牌查詢 POS 機(session) 後,確定飲料已經好了,再遞飲料給A
由上方的例子可以看出,Session 及 Cookie 是相對應的存在。
最近被公司要求去抓 GPS晶片提供的Callback 位置,所幸官網上有提供SDK 跟文件可以研讀,目前是在 CentOS 6.6上 Compile的,詳細的kernel realease 為:2.6.32-504.1.3.el6.centos.plus.x86_64
但在 compile 時會出現以下訊息
1 | [root@Demo PDS_Services]# make |
這題的目標是下載網站內容處理成json格式,並沒有任何的防禦機制,因此相對來講非常簡單,我們的步驟如下: