๐ Personal project / ๐ 2021.10 - 2021.11
์ํ๋ ํด๋ณ์ ๊ธฐ์ ์ ๋ณด ์กฐํ๋ฅผ ์ ๊ณตํ๋ Sea Forecast Service์ Scheduled Crawler part์ ๋๋ค.
โ
- Python 3.9
- Scrapy 2.5
- Celery 5.2
- RabbitMQ 5.0
- Heroku
โ
-
ForecastSpider
๐ ์ฝ๋ ํ์ธ- Scrapy๋ก ๊ธฐ์์ฒญ์ ์ํ ํด์์์ฅ ๊ธฐ์ ์ ๋ณด๋ฅผ ํฌ๋กค๋งํ๋ spider ํด๋์ค๋ฅผ ๊ตฌํํ์ต๋๋ค.
https://marine.kma.go.kr/custom/leisure.pop?work=beach&id=
์์ ํด๋ณ์ id๋ง ๋ณ๊ฒฝํ๋ฉด์ ํฌ๋กค๋งํฉ๋๋ค.- 24๋ฒ์ ์ ์ธํ 1~26๋ฒ ํด๋ณ์ ์ ๋ณด๋ฅผ ํฌ๋กค๋งํฉ๋๋ค. (24๋ฒ ํ์ด์ง๋ ๋น ์ ๋ณด๊ฐ ์์ด ์๋ตํ์ต๋๋ค.)
- ๊ฐ ํด๋ณ์ ์ค์ ๊ธฐ์ ์ ๋ณด๋ฅผ ํ์ฑํด ํ์ดํ๋ผ์ธ์ผ๋ก ๋๊น๋๋ค.
-
PostgreSQLPipeline
๐ ์ฝ๋ ํ์ธ-
ํฌ๋กค๋งํ ์ ๋ณด๋ฅผ Psycopg2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก PostgreSQL DB์ ์ ์ฅํ๋ pipeline ํด๋์ค๋ฅผ ๊ตฌํํ์ต๋๋ค.
-
BeachForecastList
ํ ์ด๋ธ์๋ ์ต์ ๊ธฐ์ ์ ๋ณด๋ง ๋ด๊ธฐ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์งฐ์ต๋๋ค. -
BeachForecastListHistory
ํ ์ด๋ธ์๋ ์ง์์ ์ผ๋ก ๊ธฐ์ ์ ๋ณด๊ฐ ์์ด๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์งฐ์ต๋๋ค.๐ก Reference: Store Scrapy crawled data in PostgresSQL
-
โ
-
tasks.py
๐ ์ฝ๋ ํ์ธ-
๋ธ๋ก์ปค๋ก RabbitMQ๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
-
Scrapy์ ์ ์์ค API
Crawler
๋ฅผ ์ฌ์ฉํด ์คํฌ๋ฆฝํธ์์ scrapy๋ฅผ ์คํํ ์ ์๋๋ก ํ์ต๋๋ค.๐ก Reference: Running Scrapy In Celery Tasks
-
Celery ์๋ฒ๋ฅผ ์คํํด๋๋ฉด Celery beat์ด 1์๊ฐ์ ํ ๋ฒ์ฉ
run_scraper_task
ํฌ๋กค๋ง ์์ ์ ๋ฉ์์ง ํ์ ๋์ ธ ์คํํ๋๋ก ๊ตฌํํ์ต๋๋ค.
-
โ
- ํ์ด์ง์ ํน์ ๋ถ๋ถ์ ๋ํ์ฌ ํฌ๋กค๋ง์ด ์ ์ด๋ฃจ์ด์ง์ง ์๋ ๋ฌธ์ ๐ ์ฝ๋ ํ์ธ
- ํํฅ์ด ๋ถ๋ช string์ธ๋ฐ number๋ก ํฌ๋กค๋ง๋๋ ํ์์ด ๋ฐ์ํ์ต๋๋ค.
- ๊ธฐ์จ, ํ์, ์ต๋, ํด๋ฉด๊ธฐ์์ด ์์์ ํํ์ number์ธ๋ฐ, ์์์ ์์ด ํฌ๋กค๋ง๋๋ ํ์์ด ๋ฐ์ํ์ต๋๋ค.
- ํด๋ผ์ด์ธํธ ์ธก์์ ์ด๋ค ์ฒ๋ฆฌ๊ฐ ์๋์ง ์์ฌํ๊ณ , ๋คํธ์ํฌ tab์ ํตํด ํน์ ํจ์๊ฐ ๋ด๊ธด jsํ์ผ์ ํ์ธํ์ต๋๋ค.
- ํด๋น js ํ์ผ์ ์๊ณ ๋ฆฌ์ฆ์ Python์ผ๋ก ์ฎ๊ฒจ util๋ก์ ํ์ฉํด ํด๊ฒฐํ์ต๋๋ค.
- Windows ํ๊ฒฝ์์ Celery ์๋ฒ๊ฐ ์ ๋๋ก ๊ธฐ๋ฅํ์ง ์๋ ๋ฌธ์
celery -A tasks worker -l INFO
๋ก ์๋ฒ๋ฅผ ์คํํ๋ฉด, task๋ฅผ ๋ฉ์์ง ํ์ ๋์ ธ๋ ์์ ์ด ์๋ฃ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.- Windows์ ๊ฒฝ์ฐ, Celery 4.x๋ถํฐ ๊ณต์์ ์ผ๋ก ์ง์ํ์ง ์์ ์ค๋ฅ๊ฐ ์ฆ์ ๋ณด์์ต๋๋ค. (Celery docs)
celery -A tasks worker -l INFO -P threads
๋ก ์๋ฒ๋ฅผ ์คํํ๋ฉด, ๋ฉ์์ง ํ์ ๋์ง ์์ ์ด ์๋ฃ๋๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.- ๋ก์ปฌ(Windows) ํ๊ฒฝ์์๋
-P threads
์ต์ ์ ๋ถ์ด๊ณ , Heroku์์๋ ํด๋น ์ต์ ์์ด ์คํํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.