2021년 2월 28일 일요일

파이썬에서 특정 인터넷 사이트 페이지 내용을 가져오는 방법 (웹크롤링)

 

파이썬은 여러가지 패키지들이 있어 개발자가 구현하기 원하는 기능들을 쉽게 구현해줄 수 있도록 해줍니다.

 

아래 소스는 특정 인터넷 사이트의 url의 페이지 내용을 가져올 수 있도록 해줍니다.

 

import requests

from bs4 import BeautifulSoup

 

# 가져오기 원하는 url 주소

url = "https://www.naver.com"

 

response = requests.get (url)

 

if response.status_code == 200:   # 에러가 발생되지 않으면

    html = response.text

    soup = BeautifulSoup (html, 'html.parser')

    print (soup)

 

위에서 “requests.get”이나 “BeuatifulSoup”requests 패키지와 beuatifulsoup4 패키지에서 지원되는 함수로서 파이썬에 설치가 되어 있어야 사용할 수 있는데, 만약 설치가 되어 있지 않다면

 

pip install requests

pip install bueatifulsoup4

 

위의 명령을 명령 프롬프트 창에서 실행시키면 설치가 됩니다.

 

위의 코드를 실행시키면 Naver 홈페이지의 내용이 출력이 됩니다.

 

아시다시피 Naver 홈페이지 내용은 엄청난 양의 html 페이지로 일일이 보여드릴 수가 없네요.

 

beuatifulsoup4 패키지는 다양한 함수를 이용해서 가져온 html 페이지 내용을 처리할 수 있도록 해줍니다.

 

"print (soup)" 대신 "print (soup.title)"을 실행시키면 가져온 페이지의 title 부분만 추출해서 보여줄 수 있습니다.

 

D:\MyPyWork\sample1>python test1.py

<title>NAVER</title>

 

"print (soup)" 대신 "print (soup.title.string)"을 실행시키면 html title 태그를 뺀 내용만 보여줄 수 있습니다.

 

D:\MyPyWork\sample1>python test1.py

NAVER

 

"print (soup)" 대신 "print (soup.p)"을 실행시키면 html p 태그 부분만 추출하여 보여줄 수 있습니다.

 

D:\MyPyWork\sample1>python test1.py

<p class="dsc">선거 후보자에 대해 자동완성을 제공하지 않습니다.

<span class="dsc_inner">기간 : 4 2 0 ~ 4 15 18시까지</span>

<a class="link" href="#">자세히보기</a>

</p>

 

현재 보여준 것은 BeuatifulSoup 패키지로 할 수 있는 일부분만 보여준 것입니다.

2021년 2월 27일 토요일

파이썬에서 원하는 패키지를 설치하는 방법

 파이썬을 설치했을때 기본 패키지들은 같이 설치가 됩니다.

 

그러나 파이썬으로 원하는 기능을 위해 프로그래밍을 하다가 필요한 패키지가 설치되어 있지 않을 때가 있습니다.

 

이럴 경우 그 패키지를 설치해야 하는데, 그때 pip 명령을 명령 프롬프트 창에서 사용할 수 있습니다.

 

pip 명령은 파이썬 패키지 색인에서 최신 버전의 모듈과 그 의존성에 따라 설치됩니다.

 

아래는 하나의 예로써 BeuatifulSoup이라는 패키지를 설치하는 예입니다.

 

D:\MyPyWork>pip install beautifulsoup4

Collecting beautifulsoup4

  Using cached beautifulsoup4-4.9.3-py3-none-any.whl (115 kB)

Requirement already satisfied: soupsieve>1.2 in c:\users\user\appdata\local\programs\python\python38-32\lib\site-packages (from beautifulsoup4) (2.1)

Installing collected packages: beautifulsoup4

Successfully installed beautifulsoup4-4.9.3

 

정확한 버전이나 최소 버전을 명령 줄에서 직접 지정할 수도 있습니다. >, < 와 같은 비교 연산자나 셸에서 해석되는 다른 특수 문자를 사용할 때는, 패키지 이름과 버전을 큰따옴표로 묶어야 합니다. 여기서는

pip install PackageA==3.2.1    # 특정한 버전

pip install "PackageA>=3.2.1"  # 최소한의 버전

 

물론 설치한 패키지를 설치해제할 수도 있습니다. 아래는 위에 설치한 BeuatifulSoup이라는 패키지를 설치해제하는 예입니다.

 

D:\MyPyWork>pip uninstall beautifulsoup4

Found existing installation: beautifulsoup4 4.9.3

Uninstalling beautifulsoup4-4.9.3:

  Would remove:

    c:\users\user\appdata\local\programs\python\python38-32\lib\site-packages\beautifulsoup4-4.9.3.dist-info\*

    c:\users\user\appdata\local\programs\python\python38-32\lib\site-packages\bs4\*

Proceed (y/n)? y

  Successfully uninstalled beautifulsoup4-4.9.3

 

일반적으로, 적절한 모듈이 이미 설치되어 있으면, 다시 설치하려고 해도 아무런 효과가 없습니다. 기존 모듈을 업그레이드하려면 명시적으로 요청해야 합니다.

 

pip install --upgrade PackageA

 

pip 명령자체도 버전업이 필요할 수도 있는데 아래와 같이 메세지가 뜨는 경우가 생겼습니다.

 

WARNING: You are using pip version 19.2.3, however version 21.0.1 is available.

You should consider upgrading via the 'python -m pip install --upgrade pip' command.

 

그래서 메세지에서 알려준대로 pip 자체를 업그레이드해봤습니다.

 

D:\MyPyWork>pip install --upgrade pip

Collecting pip

  Downloading https://files.pythonhosted.org/packages/fe/ef/60d7ba03b5c442309ef42e7d69959f73aacccd0d86008362a681c4698e83/pip-21.0.1-py3-none-any.whl (1.5MB)

     |████████████████████████████████| 1.5MB 1.7MB/s

Installing collected packages: pip

  Found existing installation: pip 19.2.3

    Uninstalling pip-19.2.3:

      Successfully uninstalled pip-19.2.3

Successfully installed pip-21.0.1

 

이전 pip 19.2.3에서 21.0.1로 업그레이드가 되었네요.