안녕하세요 캡틴카푸치노입니다.
너무 오랜만에 인사드리네요
오늘 배워볼 주제는 '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 모듈
- import requests
get 요청하기
url = 'https://news.v.daum.net/v/20190728165812603'
resp = requests.get(url)
resp.text
post 요청하기
url = 'https://www.kangcom.com/member/member_check.asp'
data = { 'id': 'macmath22', 'pwd': 'T' }
resp = requests.post(url, data=data)
resp.text
HTTP 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 처리하기
url = 'https://news.v.daum.net/v/20190728165812603'
resp = requests.get(url)
if resp.status_code == 200:
resp.headers
else: print('error')
공공데이터 포털 OPEN API 사용 방법
Endpoint 확인하기
key 값 확인하기
패스트캠퍼스 '캐글 1위와 풀어보는 머신러닝 입문 트레이닝 Global Expert.' 수강 후기 (0) | 2024.12.11 |
---|---|
[실력 있는 데이터 사이언티스트를 향해] (0) | 2022.02.28 |
[Python] 함수 - function (0) | 2020.08.11 |