Python scrapy 사용법
Programming개요
기본적으로 scrapy crawler의 조작은 scrapy
명령어를 통해 이루어진다.
scrapy
는 해당 모듈을 global
이 아닌 virtualenv
등을 이용하여 프로젝트 단위로 관리하는 것을 권장한다.
Spider class?
Crawler
의 Rule
, 즉 규칙을 구체화 시킬 수 있도록 만든 클래스이다. 디자인 패턴에서는 Template Method Pattern
과 같이 scrapy.Spider
클래스 자체로는 특별한 일을 하지 않지만, 크롤러의 행동을 정의해 놓았기 때문에 이를 상속된 하위 클래스에서 구현해주는 패턴으로 생각하면 될 것 같다.
하위 클래스에서는 기본적으로 scrapy.Spider
클래스를 상속받도록 구현해야 한다. 흐름은 start_requests
함수에서 반환된 scrapy.Request
객체를 시작으로, 각 응답 scrapy.http.Response
을 callback
매개변수의 인자로서 넘겨주게 된다.start_requests
는 일련의 scrapy.Request
객체들을 반환하는데, 이는 start_urls
라는 URL
을 모은 list
타입의 Property
로 대체할 수 있다. (이 때는, scarpy.Request
처럼 callback
지정이 없기 때문의 자동으로 self.parse
을 callback
으로 사용한다.)callback
매개변수는 보통 parse
함수를 지정하게 되는데, 여기서 받아온 응답에 대한 처리를 진행하게 된다.callback
에서 인자로 받은 응답 값을 처리하여 직접 파일로 저장하게 하거나, 반환하여 scrapy
에서 처리하도록 할 수 있다.parse
에서 반환된 객체들은 결과물로서 scrapy
옵션에 따라 파일에 저장되거나 stdout
으로 출력되게 할 수 있다.parse
함수 또한 scrapy.Request
객체를 돌려주도록 할 수 있는데, 이 경우 다시 start_requests
로 흐름이 넘어가 응답을 받아오게 된다.
따라서 파싱 된 결과물에서 다음페이지로 이동 등의 링크를 추출하여 다시 start_requests
로 넘겨주는 것이 가능하게 된다. 이 때는 보통 response.follow
라는 축약 명령을 사용해서 가독성을 높이고, 불필요한 타이핑도 줄일 수 있다.
scrapy command
scrapy 프로젝트 생성하기scrapy startproject [project_name]
구현한 spider를 실행scrapy crawl [spider_name]
특정 URL의 spider구현을 위한 interactive 모드scrapy shell [URL]
scrapy.Spider를 상속하는 템플릿 코드 생성scrapy genspider [spider_name] [URL]
spider의 목록을 출력scrapy list
'Programming' 카테고리의 다른 글
커맨드라인 팁 모음 (0) | 2020.05.01 |
---|---|
XPath 사용방법 (0) | 2020.04.21 |
파이썬의 GIL(Global Interpreter Lock) (0) | 2020.04.12 |
pre-emptive multitasking vs cooperative multitasking (0) | 2020.04.12 |
Python2 pwntools SyntaxError: invalid syntax 해결방법. (0) | 2020.04.03 |