在VirtualBox的Linux虛擬機中安裝scrapy
,並且爬取ptt,把爬取下來的文字儲存在mongodb
的資料庫中。使用的Linux版本為Ubuntu 22.04。下面要進行的工作
mongodb
的網頁介面mongo-express
的通訊埠開放到宿主機能存取到,才能建立documents
。docker
的network
和volume
兩部分,並且做成docker-compose
可以執行的yaml
。scrapy
的專案並且寫程式前題是已經將所有需要的函式庫和套件都安裝好了,參考這邊:https://hackmd.io/uvrlutTrT92ohSPl8jk9zw
mongo-express
的介面在目前虛擬機的「設定」/「網路」/「介面卡1」/「進階」/「連接埠轉送」中加一個如下:
docker network create mongodb
(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 volume create mongodb_storage
(JoshDev)joshhu:~/ $ docker volume ls [0:21:43]
DRIVER VOLUME NAME
local pttbatch_mongodb_storage
base.yaml
先進入工作目錄,在工作目錄下建立
cd ~workspace/scrapy
接下來建立下面的檔案,如果是在明新的虛擬機中,這個檔案已經建立完畢了。
# 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
可以觀看這個檔案存不存在:
(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
cd ~workspace/scrapy
docker compose -f base.yaml up -d
啟動成功後,使用docker ps
查看是否啟動成功
(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
如果要把服務停止,就輸入下面:
docker compose -f base.yaml down
這邊就延用安裝selenium時的同一個虛擬環境,不創建新的虛擬環境了,因為要共用很多套件。
這邊新安裝幾個。
cd ~workspace/selenium
pipenv shell
pip install scrapy
pip install pymongo
pip install pyptt==0.9.50
pip install nest_asyncio
ptt
進入虛擬機桌面,在確定Docker服務都啟動的情況下,從瀏覽器進入https://0.0.0.0:8081
。
輸入ptt
並且按下「Create Database」
此時首頁應該會出現一個「ptt」的資料庫
建立collection
此collection放ptt的所有看板
預設不檢查,執行程式前先清掉