266일차 스크래피(Scrapy) - 지마켓(Gmarket) 크롤링

2021. 9. 21. 20:14Diary/201~300

 

크롤러(spider) 작성

 

1. items.py 작성

  • 크롤링하고자 하는 데이터를 아이템(item)으로 선언해줘야 함
  • 클래스를 만들고, scrapy.item을 상속받고, 아이템 이름을 만들고, scrapy.Field()를 넣어줘야 함.

 

2. gmarket.py 수정

  • yield 명령어로 아이템(item)에 저장할 수 있다.
  • 아이템 클래스 생성 및 아이템 저장

선언

from 프로젝트이름.items import 아이템클래스명

 

클래스 생성

item = 아이템클래스명()

 

아이템 저장

item['아이템명'] = 아이템데이터

yield item

 

3. 데이터 포맷으로 아이템 저장

  • csv, xml, json 포맷

- scrapy crawl {크롤러명} -o {저장할 파일명} -t {저장포맷}

 

# 한글 문자가 깨질 경우

- setting.py에 추가

FEED_EXPORT_ENCODING = 'utf-8'

 


- gmarket.py

 

- items.py

 

- json 파일로 저장


아이템 데이터 후처리하기 : 파이프라인(pipelines)

  • 일부 아이템은 저장하지 않거나
  • 중복되는 아이템을 저장하지 않거나
  • 데이터베이스등에 저장하거나
  • 특별한 포맷으로 아이템을 저장하고 싶거나

-> 아이템이 저장되려 할 때마다, pipelines.py의 process_item 함수를 호출한다.

 

 

1. settings.py 수정

  • 여러 클래스가 있을 경우, 숫자가 낮을 수록 먼저 실행됨
  • 일종의 우선순위 번호로, 0 ~ 1000 숫자 중에 임의로 숫자를 부여하면 됌.
  • 스파이더 실행 후, Enabled item pipelines를 터미널에서 확인해서, 설정 적용 여부 확인 가능

 

2. pipelines.py 수정

 

각 아이템 생성 시, pipelines.py에 있는 process_item 함수를 거쳐가게 되어 있다.

필요한 아이템만 return 해주고, 필터링할 아이템은 DropItem을 통해, 더이상의 아이템 처리를 멈추게 해줘야 한다.

 

 

3. json파일로 저장 후 확인

 

40000원 이상의 아이템만 잘 가져와졌다~!