如何免費建立雲端爬蟲叢集
如何免費建立雲端爬蟲叢集
線上體驗
網路拓撲圖
註冊帳號
- Heroku
訪問 heroku.com 註冊免費賬號(註冊頁面需要呼叫 google recaptcha 人機驗證,登入頁面也需要 科學上網 ,訪問 APP 執行頁面則沒有該問題),免費賬號最多可以 建立和執行5個 APP 。
- Redis Labs(可選)
訪問 redislabs.com 註冊免費賬號,提供 30MB 儲存空間 ,用於下文通過 scrapy-redis 實現 分散式爬蟲 。
通過瀏覽器部署 Heroku APP
- 訪問 my8100/scrapyd-cluster-on-heroku-scrapyd-app 一鍵部署 Scrapyd APP。(注意更新頁面表單中 Redis 伺服器的主機,埠和密碼)
- 重複第1步完成4個 Scrapyd APP 的部署,假設應用名稱為
svr-1
,svr-2
,svr-3
和svr-4
- 訪問 my8100/scrapyd-cluster-on-heroku-scrapydweb-app 一鍵部署 ScrapydWeb APP,取名
myscrapydweb
- (可選)點選 dashboard.heroku.com/apps/myscrapydweb/settings 頁面中的 Reveal Config Vars 按鈕相應新增更多 Scrapyd server,例如 KEY 為
SCRAPYD_SERVER_2
, VALUE 為svr-2.herokuapp.com:80#group2
- 訪問 myscrapydweb.herokuapp.com
自定義部署
安裝工具
- Git
- Heroku CLI
- 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 [email protected]
建立 Scrapyd 叢集
- 新建 Git 倉庫
cd scrapyd git init # explore and update the files if needed git status git add . git commit -a -m "first commit" git status
- 部署 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
-
新增環境變數
- 設定時區
# 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步和第3步完成餘下三個 Scrapyd APP 的部署和配置:
svr-2
,svr-3
和svr-4
建立 ScrapydWeb APP
- 新建 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
- 部署 ScrapydWeb APP
heroku apps:create myscrapydweb heroku git:remote -a myscrapydweb git remote -v git push heroku master
-
新增環境變數
- 設定時區
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
部署和執行分散式爬蟲
- 上傳 demo 專案,即 scrapyd-cluster-on-heroku 目錄下的壓縮文件 scrapy_redis_demo_project.zip
- 將種子請求推入
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"}']
總結
- 優點
- 免費
- 可以爬 Google 等外網
- 可擴充套件(藉助於 ScrapydWeb )
- 缺點
- 註冊和登入需要科學上網
- Heroku APP 每天至少自動重啟一次並且重置所有檔案 ,因此需要外接資料庫儲存資料,詳見 devcenter.heroku.com