참고:개발자를 위한 파이썬(윤웅식저, 한빛미디어)
운영체제:윈도우10
버전:파이썬2.7.14
virtualenv사용
#가상환경 만듬
C:\pyStudy>python -m virtualenv p2venv
#가상환경 실행
C:\pyStudy>p2venv\Scripts\activate
(#가상환경 종료 >deactivate)
#가상환경 실행 확인
(p2venv) C:\pyStudy>
#스크래피 설치
(p2venv) C:\pyStudy>pip install scrapy
#설치 확인
(p2venv) C:\pyStudy>scrapy
#스크래피 프로젝트 생성
(p2venv) C:\pyStudy>scrapy startproject hanbit_media
# 프로젝트 디렉토리
(p2venv) C:\pyStudy>cd hanbit_media
(p2venv) C:\pyStudy\hanbit_media>
hanbit_media\itemps.py
설정해준 아이템들로 해당 정보를 수집
# -*- coding: utf-8 -*-
import scrapy
class HanbitMediaItem(scrapy.Item):
    # 책 이름
    book_title = scrapy.Field()
    # 저자 이름
    book_author = scrapy.Field()
    # 번역자 이름
    book_translator = scrapy.Field()
    # 출간일
    book_pup_date = scrapy.Feild()
    # ISBM
    book_isbn = scrapy.Field()
    pass
#스파이더 만들기
http,www를 생략해서 입력
(p2venv) C:\pyStudy\hanbit_media>
scrapy genspider -t crawl book_crawl hanbit.co.kr
hanbit_media\spiders 디렉토리에 생성됨
#스파이더 파일 수정
hanbit_media\spiders\book_crawl.py
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class BookCrawlSpider(CrawlSpider):
    # 크롤러 이름. 실제 크롤링 실행시 사용
    name = 'book_crawl'
    # 크롤러 실행 허용할 도메인 지정. 이외의 도메인 무시
    allowed_domains = ['hanbit.co.kr']
    # 시작점. 리스트로 지정해 한 번에 여러 웹 페이지 크롤링 시작 가능 
    start_urls = [
        'http://hanbit.co.kr/store/books/category_list.html?cate_cd=001',
        'http://hanbit.co.kr/store/books/category_list.html?cate_cd=002',
        'http://hanbit.co.kr/store/books/category_list.html?cate_cd=003',
        'http://hanbit.co.kr/store/books/category_list.html?cate_cd=004',
        'http://hanbit.co.kr/store/books/category_list.html?cate_cd=005',
        'http://hanbit.co.kr/store/books/category_list.html?cate_cd=006',
        'http://hanbit.co.kr/store/books/category_list.html?cate_cd=007',
        'http://hanbit.co.kr/store/books/category_list.html?cate_cd=008',
        ]
    # 규칙 설정
    # 시작점의 모든 링크 검사 후 규칙에 맞는 링크를 정해진 콜백 메서드 실행
    # follow = True 시 해딩 링크 대상으로 재귀적으로 앞 작업 반복
    rules = (
        Rule(
            # 크롤링할 링크 정규식으로 표현
            # store/books/look.php?p_code=B123123
            LinkExtractor(allow=r'store/books/look.php\?p_code=.*'),
            # 해당 링크 요정 전송 후 응답 오면 실행할 콜백 메서드 지정
            callback='parse_item',
            # True 설정 시 응답에 다시한번 rules 적용, 재귀적으로 실행
            follow=True),
        # 여러 규칙 설정 가능
        Rule(LinkExtractor(allow=r'store/books/category_list\.html\?page=\d+&cate_cd=00\d+&srt=p_pub_date'))
    )
    def parse_item(self, response):
        ''' rules를 통과한 링크에 요청 보내 받은 응답을 해당하는 Rule()의 콜백 메서드 실행
        response 를 파라미터로 받고 XPath,CSS 선택자로 원하는 요소 추출'''
        # 설정한 아이템에 맞춰 딕셔너리 채우고 반환
        i = {}
        
        # 책 이름
        i['book_title']=response.xpath('//*[@id="container"]/div[1]/div[1]/div[1]/div[2]/h3/text()').extract()
        # 저자 이름
        i['book_author']=response.xpath('//*[@id="container"]/div[1]/div[1]/div[1]/div[2]/ul/li[strong/text()="저자 : "]').extract()
        # 번역자 이름
        i['book_translator']=response.xpath('//*[@id="container"]/div[1]/div[1]/div[1]/div[2]/ul/li[strong/text()="번역 : "]').extract()
        # 출간일
        i['book_pub_date']=response.xpath('//*[@id="container"]/div[1]/div[1]/div[1]/div[2]/ul/li[strong/text()="출간 : "]').extract()
        # ISBM
        i['book_isbn']=response.xpath('//*[@id="container"]/div[1]/div[1]/div[1]/div[2]/ul/li[strong/text()="ISBN : "]').extract()
        return i
#크롤링 실행
해당 디렉토리에 접근후
scrapy 명령어를 이용하여 프로젝트가 활성화 되어 있는지 확인
(p2venv) C:\pyStudy\hanbit_media>scrapy crawl book_crawl -o book_list.csv -t csv
CSV형식으로 book_list.csv파일에 저장
--에러발생--
'공부 > etc' 카테고리의 다른 글
| Netlify에 가비아에서 구매한 도메인 연결하기 (1) | 2021.04.19 | 
|---|---|
| OAuth 2.0 인증 서버 (Authorization Server) (0) | 2020.06.06 | 
| 메일 송수신 프로토콜(POP3, IMAP, SMTP) (0) | 2020.01.06 |