관리 메뉴

안까먹을라고 쓰는 블로그

파이썬을 이용한 웹 크롤링(Web Crawling) 어플리케이션 만들기 본문

Language/Python

파이썬을 이용한 웹 크롤링(Web Crawling) 어플리케이션 만들기

YawnsDuzin 2020. 3. 10. 19:26

 

반응형

 

리눅스의 기본적인 업데이트 명령어

sudo apt-get update

 

컴파일러(gcc, make) 등의 라이브러리 설치 명령어

sudo apt-get install build-essential

 

Python 버전확인 (리눅스에는 기본적으로 파이썬이 설치가 되어있다)

python -V

 

Python 설치 명령어

sudo apt-get -y install python-dev

 

python에서 사용하는 pip 설치 명령어

sudo apt-get install python-pip

 

 

가상환경 설정하기

 

virtualenv 가상환경 사용관련 패키지 설치

sudo pip install virtualenv virtualenvwrapper

virtualenv 환경설정

vi .bashrc 에서, 가장 아래 쪽에 아래의 두줄을 추가

  export WORKON_HOME=$HOME/,virtualenvs

  source /usr/local/bin/virtualenvwrapper.sh

virtualenv 실행 명령어

source .bashrc

가상환경 만들기

mkvirtualenv "가상환경이름"

"importerror: no modue named zipp" 이런 에러가 표시되어,

아래 명령 실행 후 다시, 위의 "virtualenv 가상환경 사용관련 패키지 설치" 부터 순서대로 다시 해보니깐 

정상적으로 "가상환경 만들기" 성공

pip install zipp

pip install --upgrade pip

 

 가상환경 종료하기

deactivate

 가상환경 실행하기

workon "가상환경이름"

 

Beautifulsoup 설치

 - html 문서에서 원하는 정보를 손쉽게 가져올 수 있는 방법을 제공

 - 자동으로 인코딩을 유니코드로 변환해서 UTF-8로 출력

 - lxml, html5lib 파서를 이용함.

https://www.crummy.com/software/BeautifulSoup/bs4/doc/

 

Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation

Non-pretty printing If you just want a string, with no fancy formatting, you can call unicode() or str() on a BeautifulSoup object, or a Tag within it: str(soup) # ' I linked to example.com ' unicode(soup.a) # u' I linked to example.com ' The str() functio

www.crummy.com

 추가 라이브러리 설치

sudo apt-get install libxml2-dev libxslt1-dev python-dev zlibl1g-dev

sudo apt-get install python-lxml

pip install lxml

 

 beautifulsoup 4버전 설치

pip install beautifulsoup4

 

Scrapy 설치

 - WEB Scraper Framwork

 - 다양한 selector 지원, 파이프라인, 로깅, 이메일

https://docs.scrapy.org/en/latest/

 

Scrapy 2.0 documentation — Scrapy 2.0.0 documentation

© Copyright 2008–2020, Scrapy developers Revision a4dbb775.

docs.scrapy.org

 추가 라이브러리 설치

sudo apt-get install libffi-dev libssl-dev

Scrapy 설치

pip install scrapy

 Scrapy 프로젝트 시작

srapy startproject "프로젝트 이름"

 

Linux Server의 파일을 Visual Studio Code로 ftp연결로 수정가능하도록 설정

https://overit.tistory.com/entry/Linux-Ubuntu-ftp-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

 

 Scrapy 구조

scrapy startproject community

 - items.py

   - 게시물에 대한 제목, url, 저작자 등을 작성한다.

  - spiders - 데이터를 크롤링한다.

      1. 크롤러의 이름 지정

          - name

      2. 스타트 url 지정

           - start_urls - 시작주소를 리스트 형태로 추가가능, 로그인이 필요한 경우 로그인 정보추가

           - start_request - 콜백함수를 지정할 수 있음, 사이트에 로그인을 할때 사용

     3. 파서 정의

          - def parse(delf, reponse):

   - pipelines.py

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

          - 데이터의 유효성 검사

          - 중복 체크

          - 데이터베이스에 아이템 저장

          - 필터링

      2. settings.py

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

   - settings.py

      - Scrapy에 필요한 전체적인 설정파일을 설정한다.

 

   - Logging

       - settings.py

          - LOG_FILE = 'logfile.log'

           - LOG_LEVEL = logging.DEBUG

        - Log Level

            1. logging.CRITICAL (for critical errors(hihest severity))

            2 logging.ERROR (for regular errors)

            3. logging.WARNING (for warning messages)

            4. logging.INFO (for informational messages)

            5. logging.DEBUG (for debugging messages (lowest severity))


 

 Scrapy 동작

   1. item 정의 (items.py)

   2. 스타트 url 지정 (start_request, start_urls), callback 함수지정(parse())

   3. callback 함수 정의

      - selector(xpath, css)를 이용하여, 데이터를 선택

   4. pipeline을 이용하여 데이터를 필터링 하거나 데이터베이스에 저장


 

Crontab

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

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

   sudo vi /etc/crontab

 - 설정가능 항목

 

 - 실행확인

  greb CRON /var/log/syslog

 

 

 

 로봇배제표준 (robots.txt)

 - 웹 사이트에 로봇이 접근하는 것을 방지하기 위한 규약

    naver.com/robots.txt 형식으로 접근

 

반응형
Comments