如何免費建立雲端爬蟲叢集

my8100發表於2019-04-04

線上體驗

scrapydweb.herokuapp.com

註冊帳號

  1. Heroku

訪問 heroku.com 註冊免費賬號(註冊頁面需要呼叫 google recaptcha 人機驗證,登入頁面也需要科學地進行上網,訪問 APP 執行頁面則沒有該問題),免費賬號最多可以建立和執行5個 APP

heroku register

  1. Redis Labs(可選)

訪問 redislabs.com 註冊免費賬號,提供30MB 儲存空間,用於下文通過 scrapy-redis 實現分散式爬蟲

redislabs register

通過瀏覽器部署 Heroku APP

  1. 訪問 my8100/scrapyd-cluster-on-heroku-scrapyd-app 一鍵部署 Scrapyd APP。(注意更新頁面表單中 Redis 伺服器的主機,埠和密碼)
  2. 重複第1步完成4個 Scrapyd APP 的部署,假設應用名稱為 svr-1, svr-2, svr-3svr-4
  3. 訪問 my8100/scrapyd-cluster-on-heroku-scrapydweb-app 一鍵部署 ScrapydWeb APP,取名 myscrapydweb
  4. (可選)點選 dashboard.heroku.com/apps/myscra… 頁面中的 Reveal Config Vars 按鈕相應新增更多 Scrapyd server,例如 KEY 為 SCRAPYD_SERVER_2, VALUE 為 svr-2.herokuapp.com:80#group2
  5. 訪問 myscrapydweb.herokuapp.com
  6. 跳轉 部署和執行分散式爬蟲 章節繼續閱讀。

自定義部署

檢視內容

安裝工具

  1. Git
  2. Heroku CLI
  3. Python client for Redis:執行 pip install redis 命令即可。

下載配置檔案

新開一個命令列提示符:

git clone https://github.com/my8100/scrapyd-cluster-on-heroku
cd scrapyd-cluster-on-heroku
複製程式碼

登入 Heroku

heroku login
# outputs:
# heroku: Press any key to open up the browser to login or q to exit:
# Opening browser to https://cli-auth.heroku.com/auth/browser/12345-abcde
# Logging in... done
# Logged in as username@gmail.com
複製程式碼

建立 Scrapyd 叢集

  1. 新建 Git 倉庫
cd scrapyd
git init
# explore and update the files if needed
git status
git add .
git commit -a -m "first commit"
git status
複製程式碼
  1. 部署 Scrapyd APP
heroku apps:create svr-1
heroku git:remote -a svr-1
git remote -v
git push heroku master
heroku logs --tail
# Press ctrl+c to stop logs outputting
# Visit https://svr-1.herokuapp.com
複製程式碼
  1. 新增環境變數

    • 設定時區
    # python -c "import tzlocal; print(tzlocal.get_localzone())"
    heroku config:set TZ=Asia/Shanghai
    # heroku config:get TZ
    複製程式碼
    • 新增 Redis 賬號(可選,詳見 scrapy_redis_demo_project.zip 中的 settings.py
    heroku config:set REDIS_HOST=your-redis-host
    heroku config:set REDIS_PORT=your-redis-port
    heroku config:set REDIS_PASSWORD=your-redis-password
    複製程式碼
  2. 重複上述第2步和第3步完成餘下三個 Scrapyd APP 的部署和配置:svr-2svr-3svr-4

建立 ScrapydWeb APP

  1. 新建 Git 倉庫
cd ..
cd scrapydweb
git init
# explore and update the files if needed
git status
git add .
git commit -a -m "first commit"
git status
複製程式碼
  1. 部署 ScrapydWeb APP
heroku apps:create myscrapydweb
heroku git:remote -a myscrapydweb
git remote -v
git push heroku master
複製程式碼
  1. 新增環境變數

    • 設定時區
    heroku config:set TZ=Asia/Shanghai
    複製程式碼
    • 新增 Scrapyd server(詳見 scrapydweb 目錄下的 scrapydweb_settings_v8.py
    heroku config:set SCRAPYD_SERVER_1=svr-1.herokuapp.com:80
    heroku config:set SCRAPYD_SERVER_2=svr-2.herokuapp.com:80#group1
    heroku config:set SCRAPYD_SERVER_3=svr-3.herokuapp.com:80#group1
    heroku config:set SCRAPYD_SERVER_4=svr-4.herokuapp.com:80#group2
    複製程式碼
  2. 訪問 myscrapydweb.herokuapp.com

    scrapydweb

部署和執行分散式爬蟲

  1. 上傳 demo 專案,即 scrapyd-cluster-on-heroku 目錄下的壓縮文件 scrapy_redis_demo_project.zip
  2. 將種子請求推入 mycrawler:start_urls 觸發爬蟲並檢視結果
In [1]: import redis  # pip install redis

In [2]: r = redis.Redis(host='your-redis-host', port=your-redis-port, password='your-redis-password')

In [3]: r.delete('mycrawler_redis:requests', 'mycrawler_redis:dupefilter', 'mycrawler_redis:items')
Out[3]: 0

In [4]: r.lpush('mycrawler:start_urls', 'http://books.toscrape.com', 'http://quotes.toscrape.com')
Out[4]: 2

# wait for a minute
In [5]: r.lrange('mycrawler_redis:items', 0, 1)
Out[5]:
[b'{"url": "http://quotes.toscrape.com/", "title": "Quotes to Scrape", "hostname": "d6cf94d5-324e-4def-a1ab-e7ee2aaca45a", "crawled": "2019-04-02 03:42:37", "spider": "mycrawler_redis"}',
 b'{"url": "http://books.toscrape.com/index.html", "title": "All products | Books to Scrape - Sandbox", "hostname": "d6cf94d5-324e-4def-a1ab-e7ee2aaca45a", "crawled": "2019-04-02 03:42:37", "spider": "mycrawler_redis"}']
複製程式碼

scrapyd cluster on heroku

總結

  • 優點
    • 免費
    • 可以爬 Google 等外網
    • 可擴充套件(藉助於 ScrapydWeb
  • 缺點
    • 註冊和登入需要科學地進行上網
    • Heroku APP 每天至少自動重啟一次並且重置所有檔案,因此需要外接資料庫儲存資料,詳見 devcenter.heroku.com

GitHub 開源

my8100/scrapyd-cluster-on-heroku

相關文章