참고:개발자를 위한 파이썬(윤웅식저, 한빛미디어)
운영체제:윈도우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 |