Language/WebCrawling

Scrapyd

아르비스 2020. 7. 13. 09:38

Scrapyd는 Scrapy를 API로 요청하여 병렬처리해주는 오픈소스이다.

 

 

https://docs.scrapy.org/en/latest/topics/scrapyd.html

 

Scrapyd — Scrapy 2.2.0 documentation

© Copyright 2008–2020, Scrapy developers Revision 9f604813.

docs.scrapy.org

 

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 서비스 목록.

 - 상세한 옵션 설명은 공식 문서를 참고하자.