Pages - Menu

2023年7月28日 星期五

[Scrapy]gerapy+scrapyd+mongo爬蟲整套流程

睡睡念

有一天突然發現,我的爬蟲不會動了,原因是網站改版,所以規則要改。
於是,既然都要改了,那就把很久以前沒有概念的docker都改一改吧,
順便改成docker compose一次解決。


正文

架設服務

docker-compose.yml

version: '3'
services:
  scrapyd:
    container_name: scrapyd
    image: vimagick/scrapyd
    volumes:
      - ./data:/var/lib/scrapyd
      - /usr/local/lib/python3.7/dist-packages
    restart: unless-stopped
    networks:
      - scrapy_net  
  gerapy:
    container_name: gerapy
    image: germey/gerapy
    volumes:
      - ./gerapy:/app/gerapy
    ports:
      - 8000:8000
    networks:
      - scrapy_net    
  mongo:
    container_name: mongo
    image: mongo:latest
    restart: always
    volumes:
      - ./mongodbdata:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: daimomadmin
      MONGO_INITDB_ROOT_PASSWORD: d@imom
    networks:
      - scrapy_net
    ports:
      - 27017:27017
  mongo-express:
      container_name: mongo-express
      image: mongo-express
      restart: always
      ports:
        - 8081:8081
      environment:
        ME_CONFIG_MONGODB_SERVER: 192.168.1.78
        ME_CONFIG_MONGODB_PORT: 27017
        ME_CONFIG_MONGODB_ADMINUSERNAME: daimomadmin
        ME_CONFIG_MONGODB_ADMINPASSWORD: d%40imom
      networks:
      - scrapy_net  
networks:
  scrapy_net:
    name: scrapy
    driver: bridge

執行

docker compose up -d

注意事項

mongo-express 底下的 ME_CONFIG_MONGODB_ADMINPASSWORD
為什麼會出現 %40?

因為直接用@ 會出現錯誤。

UnhandledPromiseRejectionWarning: MongoParseError: Unescaped at-sign in authority section

以下是chatGPT的回答


![[138-fig.1.jpg]]

設定gerapy

如果是根據上面的docker compose建立的話,
網址用 localhost:8000登入,
預設的帳密是 admin/admin,進去後最好改一下。

  1. 設定 scrapyd的位置,在同一個network裡面,
    所以能這樣互打。



  1. 上傳專案
    這邊要注意,上傳的壓縮檔案裡面要有『 .cfg』的檔案
    檔案結構如下


    壓縮的時候,請針對上層目錄直接壓縮,以上圖來說就是壓縮TaazeSpider這個資料夾。
    上傳完後,可以按Edit,可以看到程式。


  2. 部署到主機上

     ![[138-fig.5.jpg]]
    必須先build,然後才可以deploy到主機上

    ![[138-fig.6.jpg]]
    如果碰到打包失敗或是部署失敗,可以到主機上看一下log。




docker logs gerapy
docker logs scrapyd
  1. 測試運作
    到主機的設定畫面,選擇schedule ,然後按下run 跑跑看有沒有正常。





  2. 設定排程
    Name : 隨意
    Project :projects的名稱
    Spider:在Schedule的名稱,可參考上圖
    Clients:主機名稱,可以用選的
    Trigger:crontab 是固定的時間執行
    interval 是 隔多久執行
    date 是 特定日期

    ![[138-fig.8.jpg]]
    好了後可以按下status,可以看到下次執行時間,從這看有沒有設定成功。



    這邊可以看到 Next time的時間



ref.
- docker部署打包失敗
- gerapy
- CSS Selector Reference

沒有留言:

張貼留言