본문 바로가기
Back-end/Python

[크롤링] 무작정 시작하기 (5) - Item

by 사용자 허도치 2019. 11. 21.
728x90

2019/11/19 - [Back-end/Python] - [크롤링] 무작정 시작하기 (1) - 패키지 선택

2019/11/19 - [Back-end/Python] - [크롤링] 무작정 시작하기 (2) - 프로젝트 준비

2019/11/19 - [Back-end/Python] - [크롤링] 무작정 시작하기 (3) - Spider

2019/11/20 - [Back-end/Python] - [크롤링] 무작정 시작하기 (4) - Selenium + Scrapy

 

  이번 포스트는 아주 아주 간단하다. Response의 결과값을 처리하고 반환할 때 Dict과 Item Object를 선택해서 사용할 수 있는데 이번 포스트는 이 중 Item Object를 반환하도록 적용하는 방법을 소개하도록 하겠다.

 

 

1. Item Class 작성.

   1-1. items.py.

1
2
3
class NavernewsItem(scrapy.Item):
    title = scrapy.Field()
    author = scrapy.Field()
cs

 

2. Spider에 적용.

   2-1. Import 및 Item 적용.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from crawler.items import NavernewsItem
 
...
 
    def parse(self, response):
        contents = response.xpath('//*[@id="main_content"]/div[1]/ul/li')
        
        for content in contents:
            title = content.xpath('a/text()').extract_first()
            author = content.xpath('span[1]/text()').extract_first()
 
            item = NavernewsItem()
 
            item['title'= title.strip() if title else title
            item['author'= author.strip() if author else author
 
            print( item )
 
            yield item
cs

          - 12-15 ln: 아이템을 생성하고 데이터를 대입.

 

 

  이상으로 이번 포스트를 마치겠다(?). 간단해도 너무 간단하다. Item에 대해서는 더이상 다룰 만한게 없다. 굳이 덧붙이자면 Dictionary로 반환하면 가변적인 컬럼들을 저장할 수 있고, Item으로 반환하면 정해진 값 외에는 오류를 반환할 수 있어서 원하는 값을 얻고자할 때 핸들링하기 쉽다는 점이다. 크롤링할 때 수집할 데이터의 특성을 잘 파악하고 선택하여 사용하길 바란다.

 

  이상으로 무작정 시작하기 크롤러 편을 마치기로 하겠다. 추후에 File 및 Image 다운로드에 대해서 다루도록 하겠다.

728x90

태그

댓글1

  • 고냥인 2020.11.14 02:31

    덕분에 체계적인 Scrapy 프레임워크를 만들수 있엇습니다. 감사합니다. ㅎ

    그런데 한가지 질문이 있습니다.

    코드를 보면 파이참 같은 IDE를 쓰시는 것 같은데,
    정작 실행은 터미널에서 scrapy crawl navernews 이렇게 하시는데요...

    이렇게 하니 디버깅이 원활하지 않습니다.
    혹시 scrapy crawl 수행할때 IDE에 연동해서 디버깅을 용이하게 할 수 있는 방법이 있나요?
    답글