크롤링 도구를 선택할 때, 사용하기 편하고 기능을 많이 제공하는걸 사용하고 싶었다.
그러던 중, 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

+ Recent posts