Scrapyd는 Scrapy를 API로 요청하여 병렬처리해주는 오픈소스이다.
https://docs.scrapy.org/en/latest/topics/scrapyd.html
1. Scrapyd란?
1-1. scrapy를 API로 서비스해주며 요청에 대해 비동기 처리를 함.
1-2. 설정한 프로세스의 수 만큼 병렬처리가 가능함.
1-3. 요청한 크롤링을 취소할 수 있음.
1-4. 비슷한 패키지로 scrapyrt가 있음.
- scrapyrt는 한번에 하나의 요청만 가능함.
- 결과를 반환받을 때까지 대기해야 함. (동기처리)
2. Scrapyd 설정 및 실행.
2-1. 패키지 설치.
pip install scrapyd scrapyd-client
- [ scrapyd-client ]: scrapyd를 deploy 하기위해 필요한 패키지
2-2 scrapyd 실행
> scrapyd
PS D:\db\Scrapy> scrapyd
2020-07-13T09:50:38+0900 [-] Loading d:\utils\python\python38\lib\site-packages\scrapyd\txapp.py...
2020-07-13T09:50:39+0900 [-] Scrapyd web console available at http://127.0.0.1:6800/
2020-07-13T09:50:39+0900 [-] Loaded.
2020-07-13T09:50:39+0900 [twisted.application.app.AppLogger#info] twistd 19.10.0 (d:\utils\python\python38\python.exe 3.8.0) starting up.
2020-07-13T09:50:39+0900 [twisted.application.app.AppLogger#info] reactor class: twisted.internet.selectreactor.SelectReactor.
2020-07-13T09:50:39+0900 [-] Site starting on 6800
2020-07-13T09:50:39+0900 [twisted.web.server.Site#info] Starting factory <twisted.web.server.Site object at 0x05D59E08>
2020-07-13T09:50:39+0900 [Launcher] Scrapyd 1.2.1 started: max_proc=32, runner='scrapyd.runner'
2020-07-13T09:51:21+0900 [-] Received SIGINT, shutting down.
2020-07-13T09:51:21+0900 [-] (TCP Port 6800 Closed)
2020-07-13T09:51:21+0900 [twisted.web.server.Site#info] Stopping factory <twisted.web.server.Site object at 0x05D59E08>
2020-07-13T09:51:21+0900 [-] Main loop terminated.
2020-07-13T09:51:21+0900 [-] Server Shut Down.
2020-07-13T09:51:21+0900 [twisted.application.app.AppLogger#info] Server Shut Down.
2-3 scrapyd-deploy 실행
> scrapyd-deploy --project=crawler
- [ --project=프로젝트명 ]: 프로젝트에 있는 모든 Spider를 deploy함.
2-4. API 요청.
curl -X POST 'http://localhost:6800/schedule.json' -d 'project=crawler&spider=navernews'
2-5. 크롤링 결과 확인.
- [ ./logs/crawler/navernews ] 폴더에서 로그 확인
3. scrapyd 상세 설정.
3-1. scrapyd.conf 작성.
[scrapyd]
eggs_dir = eggs
logs_dir = logs
dbs_dir = dbs
items_dir =
jobs_to_keep = 5
max_proc = 0
max_proc_per_cpu = 4
finished_to_keep = 100
poll_interval = 5.0
bind_address = 127.0.0.1
http_port = 6800
debug = on
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root
[services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus
- [ scrapyd ]는 실행 옵션이며, [ services ]는 API 서비스 목록.
- 상세한 옵션 설명은 공식 문서를 참고하자.