본문 바로가기
ML/Machine Learning

ML) Python으로 HTML 파싱하기!

by 후르륵짭짭 2020. 7. 1.
728x90
반응형

 

안녕하세요 민나상! 후르륵 짭짭 입니다.

오늘은 머신러닝을 하기 전 준비 단계인 데이터 수집 방법을 배워 볼려고 합니다.

머신 러닝을 공부하기 전에 일반적으로 데이터를 수집하고 그리고 그것을 파일 형태로 저장을 해야합니다.

그럼 Python으로 데이터를 수집하는 방법에 대해서 알아 보도록 합시다.

시작하기 앞서 HTML 파싱에 필요한 라이브러리인 BeautifulSoup를 설치해줘야합니다.

Anaconda Prompt를 키시고 

pip install beautifulsoup4

pip install requests

를 설치 해줍니다.

그리고 나서 Jupytor NoteBook을 키시고 파일을 생성한 뒤

이렇게 ** import ** 해주세요.

import requests

from bs4 import BeautifulSoup

** from A import B = B의 내용 중 A를 사용하겠다 

그리고 나서

requests.get( 다운 받을 웹 주소 )를 넣어 줍니다. 그러면 request 변수에 data가 전송이 되고

BeautifulSoup에 "html.parser" 속성으로 request.content를 넣어주면 html 코드가 soup 변수에 저장이 됩니다.

이제 부터 본격적인 파싱에 대해서 알아 보겠습니다.

** find 와 find_all **

find는 검색하는 태그를 HTML 코드에서 처음으로 보이는 녀석을 찾습니다.

반면 find_all은 검색할 태그를 HTML 코드에서 몽땅 가져옵니다.

table 변수에는 soup.find("tbody")를 사용해서 <tbody> - </tbody> 까지의 모든 내용이 들어갑니다.

그리고 이 <tbody> 안에는 수많은 태그 들이 있죠. 그래서 table.find_all("tr")을 해주면 배열 형태로 

<tbody> 안에 있는  <tr> 태그를 모두 가져오게 됩니다.

** find 와 find_all 함수의 기능 **

이제 내부의 내용을 가져 오기 위해서는 get_text() 함수와 ["태그"] 방법이 있습니다.

만약에

<a href="www.naver.com"> 네이버 </a>

link= soup.find("a") 이렇게 했다면 table에는 위의 코드가 들어 있을 겁니다.

그리고 href를 가져 오기 위해서는 link["href"] 이렇게 한다면 href의 내용을 가져올 수 있습니다.

만약 link = soup.find_all("a")라면 

for item in link:

    print(item["href"])

이렇게 해주시면 되겠죠?? ㅎㅎㅎ

또한 만약에 특정 class가 있는 태그를 가지고 오고 싶을 때는 위에 처럼

find_all("태그" , class_="클래스 이름") , find("태그" , class_="클래스 이름")

이렇게 해주시면 됩니다.

그러면 p 태그 이면서 클래스가 mb-0 인 놈들만 가져오게 됩니다.

** select 와 select_one**

find와 달리 select 가 있습니다. 

하나만 가져올 때는 select_one

여러개를 가져올 때는 select 이렇게 사용합니다.

개인적으로는 select함수가 사용하기 편하다는 것을 느꼈습니다.

하나의 태그를 가져올 때

find("a") = select_one("span") 

하나의 태그를 가져오면서 클래스 지정이 있을 때

find("a", class_="entry-font") == select_one("span[class=entry-font"])

하나의 태그를 가져오면서 클래스를 지정하고 그 하위의 태그를 찾을 때

find("a", class_="entry-font").div = select_one("span[class=entry-font] > a ")

 

이렇게 보니 select는 훨씬 단순하게 태그를 타고 내려 갈 수 있다는 장점이 있습니다.

많이 간단해지죠.

 

지금까지 Python으로 HTML 파싱하는 방법을 배워 보았습니다.

아직 자세하기 모르니 저도 아래 부분을 참고해서 공부한거라 화이팅 하세요!!

throughkim.kr/2016/04/01/beautifulsoup/

 

Beautifulsoup로 학식 테이블 스크래핑하기

처음 파이썬에 관심을 가지게 된 이유는 크롤러와 스크래퍼 때문이었다. 이번에는 BeutifulSoup를 활용해 동국대학교 학식 식단표를 스크래핑해본다. (Mac OS X, Python 3.4.1 환경에서 실행된 내용임) Bea

throughkim.kr

desarraigado.tistory.com/14

 

[python] BeautifulSoup 모듈 find() 와 select()의 차이점

- select 와 find는 기본적으로 같은 역할은 한다 - find의 경우 .find( 태그이름, class_="클래스이름") 과 같이 지정해줘야 하지만 - select의 경우 .select(태그이름.클래스이름)과 같이 띄어쓰기 만으로 설�

desarraigado.tistory.com

tariat.tistory.com/525

 

웹크롤링 필수 라이브러리 beautifulsoup 사용법과 유용한 팁!

빅데이터, AI가 각광을 받으면서 파이썬이 급부상하고 있다. 파이썬은 프로그래밍 언어이기 때문에, 데이터 분석 뿐만 아니라 다양한 작업들을 할 수 있다. 그 중에서 많이 하는 작업중 하나는 ��

tariat.tistory.com

 

728x90
반응형

댓글