상세 컨텐츠

본문 제목

[Python] Web Crawling

machine learning

by 캡틴카푸치노 2021. 2. 7. 16:36

본문

안녕하세요 캡틴카푸치노입니다.

너무 오랜만에 인사드리네요

오늘 배워볼 주제는 'Web Crawling'입니다.

데이터를 수집하는 가장 기본적인 과정이라 할 수 있는 웹 크롤링은

데이터 분석에 있어서 필수적으로 요구되는 작업이라 할 수 있는데요.

 

웹 크롤링은 웹 페이지로부터 데이터를 추출하는 행위를 일컫습니다.

웹 크롤링을 하기 위해선 우선적으로 html의 구조를 어느정도 파악하는게 좋습니다.

 

- HTML 이란?

HTML(Hypertext markup language) 은 웹페이지를 보여줄 때 사용하는 언어에요.

모든 웹사이트는 html을 기본적으로 사용하여 만들어져 있는데요, 기본구조는 다음과 같습니다.


[HTML]

 

1.1 기본 태그 - html, head, body

html 문서는 html 문서인 걸 표시하는 <html></html>이 있고

필요한 데이터를 불러오거나, 문서 정보를 표시할 때 쓰는 <head></head>,

웹 페이지를 표시할 때 쓰이는 <body></body>로 구성되어 있습니다.

<html><head><body> ... 이 3개의 태그는 항상 있어야 되니 잊지 마세요.

 

1.2 기본 태그 (문자) - p, h1

<p></p> 는 문자를 적을 때 쓰는 태그고

<h1></h1>도 문자를 적을 때 쓰는 태그인데 h1은 문자의 크기가 기본적으로 정해져 있는 태그에요.

h1 - h2 - h3 - h4 - h5 - h6 같이 점점 작은 크기의 문자를 표시합니다.

 

1.3 자주 쓰는 태그

<a></a> a 태그는 다른 사이트에 링크를 걸 때 씁니다.

ex) <a href = 'https:// ~'>

 

<input></input> 태그는 입력을 받을 때 사용하는데, 버튼 같은 걸 만들 때 씁니다.

 

<img src=""/> 태그는 이미지를 표시할 때 쓰여요


[Crawling]

 

크롤링에도 여러가지 방법이 있지만, 오늘은 그 중 한 가지를 소개해드리려 합니다.

과정은 다음과 같습니다.

1. http ... request 보내기 & response 받기

2. beautifulsoup4 모듈

3. save data

 

 

1. pip install beautifulsoup4 requests 을 통해 beautifulsoup와 requests 모듈 설치

- requests는 인터넷 상으로 데이터를 보내고, 받는 걸 쉽게 해줍니다. 웹사이트에서 html 문서를 받을 때 쓰죠.

- beautifulsoup(뷰티플 소프)은 받은 html 문서를 파싱할 때 씁니다.

파싱은 분해해서 다루기 편하게 만드는 걸 말하죠. beautifulsoup를 쓰면 원하는 html 태그를 쉽게 찾을 수 있습니다.\

 

2. Beautifulsoup4 모듈

- 유용한 함수들을 이용하여 태그를 추출합니다.

1. find : 1개의 태그만 찾는다

2. find_all : 모든 태그를 찾느다

3. select_one : 1개의 태그만 찾는다

4. select : 모든 태그를 찾는다.

... find와 select의 차이 : 기능적으로 동일하나, 원리가 다릅니다. 

   find는 html tag를 통해 찾지만, select는 css를 통해 찾지요.

 

3. csv 파일로 저장

 


위 3 단계를 거치면 기본적인 크롤링을 마칠 수 있습니다.

request 모듈에 대한 부가설명과 공공데이터 Open API 활용법을 아래에 첨부해놓았으니 읽어보시는걸 추천드릴게요.

 

 

requests 모듈

  1. http request/response를 위한 모듈
  2. HTTP method를 메소드 명으로 사용하여 request 요청 예) get, post

- import requests

 

 

get 요청하기

  1. http get 요청하기
  2. query parameter 이용하여 데이터 전달하기

url = 'https://news.v.daum.net/v/20190728165812603'

resp = requests.get(url)

resp.text

 

post 요청하기

  1. http post 요청하기
  2. post data 이용하여 데이터 전달하기

url = 'https://www.kangcom.com/member/member_check.asp'

data = { 'id': 'macmath22', 'pwd': 'T' }

resp = requests.post(url, data=data)

resp.text

 

HTTP header 데이터 이용하기

  1. header 데이터 구성하기
  2. header 데이터 전달하기

 

url = 'https://news.v.daum.net/v/20190728165812603'

headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' }

resp = requests.get(url, headers=headers)

resp.text

 

HTTP response 처리하기

  1. response 객체의 이해
  2. status_code 확인하기
  3. text 속성 확인하기

url = 'https://news.v.daum.net/v/20190728165812603'

resp = requests.get(url)

if resp.status_code == 200:

   resp.headers

else: print('error')

 


공공데이터 포털 OPEN API 사용 방법

  1. 공공데이터 포털 회원가입/로그인(https://www.data.go.kr/)
  2. API 사용 요청 / 키 발급
  3. API 문서(specification) 확인
  4. API 테스트 및 개발

 

Endpoint 확인하기

  • API가 서비스되는 서버의 IP 혹은 domain 주소

 

key 값 확인하기

  • 서비스 호출 트래킹할 목적이나 악의적인 사용을 금지할 목적으로 주로 사용
  • 새로 발급받은 키는 1시간 이후 사용 가능

 


 

'machine learning' 카테고리의 다른 글

[실력 있는 데이터 사이언티스트를 향해]  (0) 2022.02.28
[Python] 함수 - function  (0) 2020.08.11

관련글 더보기