크롤링 도구를 선택할 때, 사용하기 편하고 기능을 많이 제공하는걸 사용하고 싶었다.
그러던 중, Scrapy에서 많은 기능을 제공한다고해서 사용해보기로 마음먹었다.
# 아까 가상환경을 통해 만든 환경으로 접속
$ workon test
#프로젝트를 만들어준다.
$ (test) root@447fe7338239:~/.virtualenvs/test# scrapy startproject tutorial
# 위와같이 프로젝트를 만들면, 자동으로 파일들이 생긴다. 좀더 편하게 개발할려면 pycharm같은 도구를 설치하는 것을 추천!
먼저 items.py 에 가져올 아이템을 정의한다.
여기선 title, link, desc을 가져오기로 정의
import scrapy
class DmozItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
이제 파싱을 해야되는데, 실제 크롤링하고 싶은 사이트와 비교하면서 하면 편하다. ( 다들 아시겠지만 크롬에서 개발자 도구를 가면 해당 Elements들을 확인가능하다 )
위 Elements에 <div class= "title-and-desc”> 인 element을 긁어와서 title, link, desc에 파싱해줄거다.
위 Elements들과 아래 코드들을 비교하면, 금방 익숙해질것이다.
이제 정보을 수집할 spider을 만들어 준다. spiders directory안에 아래와 같이 만들어주었다.
dmoz_spider.py
import scrapy
from tutorial.items import DmozItem
class DmozSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
]
def parse(self, response):
for sel in response.xpath('//*[@class="title-and-desc"]'):
title = sel.xpath('a/div[@class="site-title"]/text()').extract()
link = sel.xpath('a/@href').extract()
desc = sel.xpath('div[@class="site-descr "]/text()').extract()
item = DmozItem()
item['title'] = title
item['link'] = link
item['desc' = desc
yield item
# yield는 generator다 아이템이 생성될때마다 리스트형태로 쌓이게 된다.
( stack형태로 쌓이게 됌 )
실행
$ scrapy crawl dmoz
json형태로 저장
scrapy crawl dmoz -o items.json
이것으로 간단하게 크롤링을 해보았다.
더 많은 정보는 공식사이트에 가면 자세히 나와 있다. scrapy는 필터 등 다양한 기능을 제공하니, 적은 비용으로 크롤링 서비스를 구축하고 싶으면 한번 시도해봤음한다.
'apps > crawling' 카테고리의 다른 글
scrapy를 통해 크롤링 해보기 - 설치 (0) | 2018.09.13 |
---|