본문 바로가기
프로그래밍/Python

(파이썬) Scrapy를 이용한 웹 데이터 크롤러(Crawler) 만들기 -2

by LiveData 2018. 12. 1.
반응형

전 시간에 item 까지 만들어 보았습니다.
혹시 이전 내용을 보지 않으셨다면 아래 링크를 클릭해주세요.

(파이썬) Scrapy를 이용한 웹 데이터 크롤러(Crawler) 만들기 -1





5. Spider 파일 만들기

Spider 파일은 정보를 얻기위한 메인코드입니다.
companycrawler -> spiders 폴더 아래에 
"companycrawler_spider.py" 파일을 만들어 줍니다.

그 후 코드를 아래와 같이 코드를 작성해주시면 됩니다.

# -*- coding: utf-8 -*-
import scrapy
import sys
from scrapy.spiders import Spider
from scrapy.selector import HtmlXPathSelector
from companycrawler.items import CompanycrawlerItem
from scrapy.http import Request
from scrapy.selector import Selector
reload(sys)
sys.setdefaultencoding('utf-8')
 
class companycrawler_Spider(scrapy.Spider):
    name = "companycrawler"  #spider 이름
    allowed_domains = ["http://www.jobkorea.co.kr/"]  #최상위 도메인
 
    #1번만 실행
    def start_requests(self):
        for i in range(1,5,1):
            yield scrapy.Request("http://www.jobkorea.co.kr/starter/?schPart=10016&Page={0}".format(i),self.parse)
 
    #아이템 parse
    def parse(self, response):
        for colum in  response.xpath('//div[@class="filterListArea"]/ul/li') :
            item = CompanycrawlerItem() 
            item['company'= colum.xpath('div/div[@class="coTit"]/a/text()').extract_first() #주택명 추출
            item['context'=colum.xpath('div/div[@class="tit"]//a/span/text()').extract_first()
            yield item
 
cs

start_requests : 처음 시작 시 1번만 호출됩니다. 현재 4개 페이지를 parse함수에 요청하고 있습니다.
parse : 요청받으면 호출되며 아이템을 찾아 결과를 계속 리턴합니다.
(yield  - return과 비슷하지만 결과를 리턴하고 종료하지 않고 계속 실행)


6. PipeLine 만들기

PipeLine은 yield나 return으로 받은 아이템 결과를 json,xml,csv,database,mail 등등 다양한 파일로 결과물을 생성시킬 수 있습니다.
현재 예제에서는 "cvs" 즉 Excel파일로 결과를 확인하겠습니다.

현재 프로젝트에서 생성되어 있는 "pipelines.py"를 열고 아래와 같이 코드를 작성합니다.

# -*- coding: utf-8 -*-
 
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
 
from __future__ import unicode_literals
from scrapy.exporters import JsonItemExporter, CsvItemExporter
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
class CompanycrawlerPipeline(object):
    def __init__(self):
        self.file = open("CompanyCrawlerFile.csv"'wb')
        self.exporter = CsvItemExporter(self.file, encoding='euc-kr')
        self.exporter.start_exporting()
 
    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item
         
    def spider_closed(self, spider):
        self.exporter.finish_exporting()
        self.file.close()   #파일 CLOSE 
cs

__init__ : 처음 한번만 실행합니다.
process_item(self,item,spider) : 결과로 리턴된 아이템을 처리합니다.
spider_closed(self,spider) : spider가 종료되면 호출합니다.


7. Setting

현재 프로젝트의 setting을 설정할 수 있습니다.
현재 반드시 setting해야할 사항은 Item과 PipeLine을 연결시키는 것입니다.

현재 프로젝트의 "settings.py" 파일을 열으시고

위 사진과 같이 주석되어 있는 부분을 풀어주시고 "CompanycrawlerPipeline"으로 바꿔줍니다.
그러면Item과 Pipeline이 연결됩니다.
오른쪽 "300" 이라는 숫자는 실행 순서를 나타냅니다. 낮은값에서 높은값으로 이동하며 0~1000까지 범위를 설정할 수 있습니다.


8. 실행 & 결과

Command창에
"scrapy crawl companycrawler" 를 입력하여 실행시킵니다.

그러면 현재 폴더에  "CompanyCrawlerFile"의 Excel 파일이 만들어져 있습니다.

CompanyCrawlerFile


반응형