建立scrapy爬蟲專案的詳細過程 = ## 前言 在VirtualBox的Linux虛擬機中安裝`scrapy`,並且爬取ptt,把爬取下來的文字儲存在`mongodb`的資料庫中。使用的Linux版本為Ubuntu 22.04。下面要進行的工作 * 設定虛擬機,將`mongodb`的網頁介面`mongo-express`的通訊埠開放到宿主機能存取到,才能建立`documents`。 * 設定`docker`的`network`和`volume`兩部分,並且做成`docker-compose`可以執行的`yaml`。 * 在Web介面上建立ptt需要的資料庫。 * 建立`scrapy`的專案並且寫程式 **前題是已經將所有需要的函式庫和套件都安裝好了,參考這邊:https://hackmd.io/uvrlutTrT92ohSPl8jk9zw** ## virtualbox的設定 ### 讓宿主機能存取虛擬機中docker執行`mongo-express`的介面 在目前虛擬機的「設定」/「網路」/「介面卡1」/「進階」/「連接埠轉送」中加一個如下:  ## 建立docker環境 ### docker的網路 ```shell= docker network create mongodb ``` ```shell= (JoshDev)joshhu:~/ $ docker network ls [0:21:24] NETWORK ID NAME DRIVER SCOPE 2b0d221bda1c bridge bridge local 96246058507a dalai_default bridge local deff2c3e1e0d host host local a71fbef86ae5 mongodb bridge local 09a70acae6f0 none null local (JoshDev)joshhu:~/ $ ``` ### 建立docker的儲存(好像沒用) ```shell= docker volume create mongodb_storage ``` ```shell= (JoshDev)joshhu:~/ $ docker volume ls [0:21:43] DRIVER VOLUME NAME local pttbatch_mongodb_storage ``` ### 建立`base.yaml` 先進入工作目錄,在工作目錄下建立 ```shell= cd ~workspace/scrapy ``` 接下來建立下面的檔案,如果是在明新的虛擬機中,這個檔案已經建立完畢了。 ```yaml= # for docker compose version: '3.1' services: mongo: image: mongo container_name: mongo volumes: - mongodb_storage:/data/db restart: always ports: - 127.0.0.1:12346:27017 environment: MONGO_INITDB_ROOT_USERNAME: must MONGO_INITDB_ROOT_PASSWORD: must networks: - inside mongo-express: image: mongo-express container_name: mongo-express restart: always ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: must ME_CONFIG_MONGODB_ADMINPASSWORD: must ME_CONFIG_MONGODB_URL: mongodb://must:must@mongo:27017/ networks: - inside volumes: mongodb_storage: {} networks: inside: name: mongodb ``` 可以觀看這個檔案存不存在: ```shell= (base) must@must:~/workspace/scrapy$ ls -al total 12 drwxrwxr-x 2 must must 4096 五 30 13:42 . drwxrwxr-x 4 must must 4096 五 30 13:42 .. -rw-rw-r-- 1 must must 727 五 25 00:36 base.yaml (base) must@must:~/workspace/scrapy$ ``` ### 啟動`mongodb`和`mongo-express` 進入虛擬機之後,切換到對應的目錄,並且啟動docker compose ```shell= cd ~workspace/scrapy docker compose -f base.yaml up -d ``` 啟動成功後,使用`docker ps`查看是否啟動成功 ```shell= (base) must@must:~/workspace/scrapy$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e945225271df mongo-express "tini -- /docker-ent…" 3 minutes ago Up 2 minutes 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp mongo-express 2beeb19c362c mongo "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 127.0.0.1:12346->27017/tcp mongo (base) must@must:~/workspace/scrapy$ ``` 可以進入虛擬機的桌面,然後用瀏覽器開啟下列網址:`https://0.0.0.0:8081`  如果要把服務停止,就輸入下面: ```shell= docker compose -f base.yaml down ``` ## 安裝爬ptt的環境 ### 安裝scrapy及ptt相關的套俏 這邊就延用安裝selenium時的同一個虛擬環境,不創建新的虛擬環境了,因為要共用很多套件。 這邊新安裝幾個。 * scrapy * mongodb * ptt * ptt相關套件 ```shell= cd ~workspace/selenium pipenv shell pip install scrapy pip install pymongo pip install pyptt==0.9.50 pip install nest_asyncio ``` ## 建立爬蟲需要的資料庫 ### 建立一個MongoDB的資料庫`ptt` 1. 進入虛擬機桌面,在確定Docker服務都啟動的情況下,從瀏覽器進入`https://0.0.0.0:8081`。  2. 輸入`ptt`並且按下「Create Database」  3. 此時首頁應該會出現一個「ptt」的資料庫  ### 建立放看板的Collection 1. 建立collection  2. 此collection放ptt的所有看板  3. 預設不檢查,執行程式前先清掉 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up