안녕하세요 민나상! 후르륵 짭짭 입니다.
오늘은 머신러닝을 하기 전 준비 단계인 데이터 수집 방법을 배워 볼려고 합니다.
머신 러닝을 공부하기 전에 일반적으로 데이터를 수집하고 그리고 그것을 파일 형태로 저장을 해야합니다.
그럼 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/
'ML > Machine Learning' 카테고리의 다른 글
ML) CoreML로 이미지 분류하기 (Feat: SwiftUI Dynamic Size View , SwiftUI ImagePickerView (0) | 2023.03.25 |
---|---|
ML) KNN 이웃 알고리즘 (지도학습) (1) | 2020.08.08 |
ML) Python으로 크롤링한 것을 엑셀로 만들기 (0) | 2020.07.13 |
댓글