본문 바로가기
파이썬

파이썬(python)을 통한 데이터 수집

by 책 읽는 개발자_테드 2019. 4. 5.
반응형

웹 요청 모듈

 

request 모듈 설치

$ pip install requests

 

원하는 이름의 .py 파일을 만든후 다음 내용을 적고, python 명령어로 실행해서 오류가 나지 않으면 설치 성공입니다.

 

import requests

 

웹 페이지 접속하기

requests를 이용하여 요청을 보내 서버가 응답한 값을 반환하게 합니다.

 

예시 코드

import  import requests as rq  # requests를 전부 타이핑하기 않고 rq라는 이름으로 대신 사용할 수 있게 합니다.

url = "https://www.airkorea.or.kr"
res = rq.get(url)

print(res)
print(res.status_code)

 

실행 결과는 아래와 같습니다.

request 반환결과

 requests는 GET과 POST로 요청을 보낼 수 있습니다. GET 요청을 보낼 때는 앞의 코드처럼 rq.get()을 이용하고, POST 요청을 보낼 때는 rq.post() 처럼 사용합니다.

 

 위의 status_code는 서버의 응답 코드이며, 이 코드에 따라 조건을 나누어 처리할 수도 있습니다.

 

예시 코드

import requests as rq  

def url_check(url):
    res = rq.get(url)
    print(res)
    sc = res.status_code

    if sc == 200:
        print("%s 요청 성공" %(url))
    elif sc == 404:
        print("%s 찾을 수 없음" %(url))
    else:
        print("%s 알 수 없는 에러: %s" %(url, sc))

url_check("https://www.airkorea.or.kr")
url_check("https://www.airkorea.or.kr/xxx")

 

실행 결과는 아래와 같습니다.

응답 코드별 조건 분기 결과

HTML 코드 보기

 

예시 코드1

import requests as rq


url = "https://pjt359loo.github.io"
res = rq.get(url)
print(res.text)

 

실행 결과는 아래와 같습니다.

결과가 길어서 짤렸습니다.

예시 코드2

import requests as rq

url = "https://help.github.com/en"
res = rq.get(url)
print(res.content)

 

실행 결과는 아래와 같습니다.

결과가 길어서 짤렸습니다.

#content 속성으로 html을 가져오면 한글을 바이너리 형태(인코딩)로 바꾸어 가져옵니다. 한글이 깨지는 현상을 방지할 수 있습니다. 인코딩 문제를 해결합니다.

 

requests 요청에 데이터 실어 보내기

 

GET요청 보내기

예시 코드

import requests as rq

url = "https://pjt359loo.github.io/"
res = rq.get(url, params={"key1":"value1", "key2":"value2"})
print(res.url)

 

실행 결과는 아래와 같습니다.

GET요청 보내기 결과

POST 요청 보내기

예시 코드

import requests as rq

url = "https://pjt359loo.github.io/"
res = rq.post(url, data={"key1":"value1", "key2":"value2"})
print(res.url)

 

실행 결과는 아래와 같습니다.

 

POST요청 보내기 결과

예외처리

 requests를 이용하여 요청을 보낼 때 에러가 발생할 수 있습니다. 예외처리를 통해 에러에 대비할 수 있습니다.

 

예시 코드

import requests as rq

url = "blog.naver.com/pjt359loo"

try:
    res = rq.get(url)
except rq.exceptions.MissingSchema:
    print('MissingSchema 에러 발생 ')

 

실행 결과는 아래와 같습니다.

requests 에러 exception

 

 

파싱 모듈

요청 모듈로 가져온 HTML 코드를 파이썬이 쓸 수 있는 코드로 변환해 줍니다.

 

bs4 사용

설치

pip install bs4

 

예시 코드

import bs4 from bs4 import BeautifulSoup
html = """"""
soup = BeautifulSoup(html, 'lxml')
#다음과 같이 bs4 모듈의 BeautifulSoup 함수를 사용합니다. 
#첫 번째 인자는 html을 가져올 주소, 두 번째 인자에는 원하는 파서를 입력합니다.

 

파서란 원시 코드인 순수 문자열 객체를 해석할 수 있도록 분석하는 것을 의미합니다. 파이썬에서 사용되는 파서는 다음과  같습니다. 

-lxml: XMl 해석이 가능한 파서입니다. 파이썬 2.x와 3.x 모두 지원합니다. C로 구현되어있어 빠릅니다. 

-html5lib: 웹 브라우저의 방식으로 HTML을 해석합니다. 파이썬으로 구현되어 있어 lxml 보다 느립니다. 2.x 버전 전용입니다. 처리 속도가 느리다는 단점이 있습니다.

 

각 파서는 pip을 이용하여 설치할 수 있습니다.

 

lxml을 통해 파싱하기

 

예시 코드

from bs4 import BeautifulSoup
html = """

test

"""
soup = BeautifulSoup(html,"lxml") #Python HTML parser
print(soup)

 

실행 결과는 아래와 같습니다.

파싱 예시 코드

 

 

 

반응형

댓글