Web

bs4 vs scrapy

아르비스 2020. 4. 2. 12:42

1. 웹 환경의 이해

1) Server & Client

클라이언트와 서버로 나뉘는 네트워크 아키텍처

  • 서버 : 특별한 서비스를 제공하는 컴퓨터
  • 클라이언트 : 서비스를 사용하는 사용자 혹은 사용자의 단말기(인터넷을 통해 연결되어 있다.)
  • 물리적인 서버로 접속해서 특정 프로그램으로 접근한다.
  • 서버의 주소
    • URL(IP + Port)
    • ex) 192.168.0.1:80
  • 서버의 종류(port)
    • 웹 서버(80) : 외부에서 접속해서 서비스에 접근
    • 데이터베이스 서버(mysql:3306)
    • DNS 서버(1023, 53)
    • FTP 서버(21)
    • ssh 서버(22)
    • 메일 서버(110,25,143)
    • etc.

2) HTTP(HyperText Transfer Protocol)

WWW 상에서 정보를 주고받을 수 있는 프로토콜(약속)

  • TCP와 UDP 통신을 통해 80번 포트로 접속
  • 언어들을 통일하자
  • 인터넷은 규정된 약속에 의해서 사용 => 표준
  • 웹 서버들이 대화하기 위한 약속

3) Request, Response

  • Request : 서버로의 요청
    • GET : 정보를 가져오는 역할
    • POST : 정보를 수정, 입력하는 역할
  • Response : 서버로 부터의 응답
    • html, javascript, css, image, etc

4) Frontend (HTML, css, javascript)

사용자가 브라우저에서 정보를 보고, 웹 서버에 특정 정보를 요청(request)하기 위한 사전 작업을 수행

  • HTML(Hyper Text Markup Language)
    • 웹 페이지를 구조적으로 나타내는 문서
    • 데이터
  • CSS
    • HTML 파일을 이쁘게 꾸며주는 역활
    • 디자인
  • JavaScript
    • 객체 기반의 스크립트 프로그래밍 언어
    • 사용자의 편의성을 보장
    • 동작

5) Backend(웹 서버, DB 서버, 웹 프레임 워크)

사용자가 요청을 받아서, 저장되어 있는 정보를 바탕으로 사용자에게 적절한 페이지를 전송

  • 웹 서버(Apache, IIS, nginx, GWS, etc.)
    • 사용자의 요청에 맞게 데이터(HTML, image, etc.)를 전송해주는 프로그램
  • 데이터 베이스(MySql, Oracle, MsSql, PostgreSQL, LightSql, MongoDB, etc.)
    • 사용자의 정보를 저장하는 저장소
  • 스크립트 엔진(php, jsp, asp)
    • 웹서버에서 사용자의 요청을 분석해주는 프로그램
  • 웹 프레임 워크(Django, Ruby on Rails, ASP.NET, ect)
    • 웹 개발을 보다 편리하게 만들어 주는 도구
    • 생산성 향상
    • 정신 건강에 좋음
    • 하지만 유행이 있다.

 

6) 프로젝트

커뮤니티의 베스트 글을 정리하여 보여주는 사이트

 


2. 웹 크롤러

0) 개발환경

웹페이지 구조 확인하기

크롬 & 파이어폭스에서 마우스 우클릭, Inspect element

1) Beautiful Soup VS Scrapy

2) Crontab

리눅스의 기본 서비스, 정해진 시간에 정해진 스크립트를 시작할 수 있다.

  • /etc/crontab 편집을 통해 사용 가능

  • 설정 가능 항목

    • 분(0-59)
    • 시간(0-23)
    • 일(1-31)
    • 월(1-12)
    • 요일(0-6)(0=일요일)
    • 사용자명령어
  • 실행 확인

    $ grep CRON /var/log/syslog


3. Scrapy 웹 크롤링

1) 웹 크롤링 이슈저작권

로봇 배제 표준(robots.txt)

  • 웹 사이트에 로봇이 접근하는 것을 방지하기 위한 규약
  • 실제 사이트의 robots.txt : 뽐뿌, 클리앙, SLR클럽

2) Scrapy구조

scrapy startproject [프로젝트 명]

 

  • spiders : 크롤링 로직이 들어 있는 디렉토리
  • items.py : 대상에 대한 정보 등을 정의
  • pipelines.py : 저장된 정보를 가지고 크롤링한 이후의 처리 작업
  • scrapy.cfg : 전체 프로젝트 배포 시의 설정, 로그 변경 가능
  • settings.py : scrapy 프로젝트에 대한 설정

scrapy의 동작

  • items 정의

  • 스타트 url 지정(start_requests, start_urls, callback 함수 지정(parse())

    • start_url : list file, string list
    • start_requests : 특정한 url에 대해서 callback 함수 지정 가능
  • callback함수 정의

    • selector(xpath, css)를 이용하여 데이터를 선택
  • items.py에 데이터 넣는다.

  • Pipeline을 이용하여 데이터를 필터링 하거나 데이터베이스에 저장

Spiders

  • 크롤러의 이름 지정
    • name
  • 스타트 URL 지정
    • start_urls
      • 시작 주소를 리스트 형태로 추가 가능
    • start_request
      • 콜백함수를 지정 할 수 있음
      • 사이트에 로그인을 할 때 사용
  • 파서 정의
    • def parse(self, response):
  • 여러개 지정해서 순차적으로 돌려도 되고, 필요한 것만 돌려도 된다.

Selector

  • HTML 문서에 특정 노드를 선택
    • css vs xpath selector

>>> response.xpath('//title/text()') >>> response.css('title::text')` Pipeline

  • 데이터를 크롤링 한 이후에 특정 행동을 수행

    • 데이터의 유효성 검사
    • 중복 체크
    • 데이터베이스에 아이템 저장
    • 필터링
  • settings.py

    • 파이프 클래스 및 순서를 지정

      ITEM_PIPELINES = { 'oneq.pipelines.CommunityPipeline': 300, }

Logging

  • Settings.py

    • LOG_FILE = ‘logfile.log’
    • LOG_LEVEL = logging.DEBUG
  • Log Level

    logging.CRITICAL - for critical errors (highest severity) logging.ERROR - for regular errors logging.WARNING - for warning messages logging.INFO - for informational messages logging.DEBUG - for debugging messages (lowest severity)

3) 웹사이트 크롤링 실전

  • clien.net

  • bobaedream.co.kr