AWS 雲端 591 租屋爬蟲架構

黃馨平
Jackycsie
Published in
4 min readAug 6, 2024

緣由

最近因為家裡有租屋的需求,剛好比較忙比較沒有空自己一直刷 591 來看,想說剛好自己 own 的服務自己測,所以我就拿了自己的服務玩一下,看看有哪裡沒有很熟的,剛好來了解一下學習,為了避免怕我以後忘記我在寫什麼程式想說久違的使用文章記錄一下。

架構圖

架構解說

我這邊主要使用到的服務是 EC2 On-Demand, EC2 Spot, SNS, MemoryDB;程式這邊我是使用 Python3.10.12 來做開發。

  1. 每天早上 9 點到晚上 9 點,透過 EC2 591 Crawler 程式將 591 上面的房屋資訊撈下來。
  2. 將撈下來的房屋資訊與 MemoryDB 做比對,若是重複的 ID 就不儲存。
  3. 確認 ID 沒有重複過後透過 SNS 傳送給 Mail 讓我們收到目前最新的租屋資訊。
  4. Spot Change EIP 每天的晚上 12 點會出發 crontab 將 EC2 591 Crawler 的 EIP 切換,避免追蹤被黑名單。
  5. 每天透過 Data Lifecycle Manager 幫 EC2 591 Crawler 做備份,目的在於每一次都會儲存 logs 以及每天都可能會修改資料所以確保我的資料都還會存在,我的 snapshot 是保留 5 天,超過 5 天我就刪掉。

591 撈取房屋資料介紹

關於 591 撈取房屋資料的程式我是參考這篇文章來進行修改的 [Python爬蟲實例] 591 租屋網 — 搜尋房屋與房屋詳情,這篇文章說明的很詳細,不管是買房,租屋,都可以透過這個程式做修改達到自己的需求,推推。

2024/10/15 更新: 由於 591 那邊的租屋 API 有更新我這邊有寫了新版的爬蟲程式,請大家跟著下面的這個教學網址搭配使用,謝謝:

去重複,寫入 DB

  1. 有介紹到我有透過 TLS 加密所以在 python 中需要特別設定 SSL 為 True 另外我這邊有使用 connection pool 接著再使用 redis connect
  2. 這樣做的好處可以減少每次程式需要連線時先經過 TLS 的協定,來提高效能。
  3. 寫入資料前先比對,資料是否重複,若是資料已經重複就不儲存。
  4. 若是資料沒有存在 DB 中 開始做資料前處理,來做傳送給 SNS 的資料做前處理。
  5. 資料前處理完成,傳給 SNS feature 來做傳送。

透過 SNS 將資料 Push 到 Mail

當 519 Crawler 的資料前處理完成以後我們會將資料的內容透過 String 的方式傳送到 Mail box,而那個區間沒有新資料的,我這邊還是會傳送 mail 給我知道目前沒有新資料,不然會擔心服務是不是掛掉了,這樣可比較安心。

另外我在寄送郵件時也有放個今天的時間以確保收到 mail 的時候不會混亂。

隨機睡眠時間

寫這個的目的主要在於降低被抓的機率,如果每天在都在相同時間撈資料,久而久之就容易被 block 掉,這樣的好處就是可以再降低被發現是爬蟲的服務。

更改 EIP

由於擔心一直爬網站會被 591 Bang ,所以我這邊用了一個定時換 Public IP 的程式,讓實例每天在晚上 12 點的時候,會自動把舊的 EIP 刪除,並且換上新的 EIP 。

總結

簡單的架構圖與程式碼差不多就寫好了,整體來說蠻簡單的,主要是來練習一下透過 Python3 程式碼與這些串接,以及來測試一下平常客戶端可能會碰到什麼痛點來模擬一下,以及用客戶開發的想法來思考事情,祝大家能找到自己喜歡的房子。

下一個計畫

目前看到信義房屋這邊還沒有人寫,下次用其他 DB 來玩一下,不然 MemoryDB 這個太貴了,燒我太多錢了。

--

--

Jackycsie
Jackycsie

Published in Jackycsie

閱讀本是尋常事,繁華靜處遇知音

黃馨平
黃馨平

Written by 黃馨平

閱讀本是尋常事,繁華靜處遇知音

Responses (3)