이번에는 웹데이터 수집하기를 학습한다. 이전에는 크롤링이라는 단어는 '자동화된 봇이 인터넷을 돌아다니며 주소를 수집하고, 수집된 주소를 기반으로 데이터를 수집하는 것'이라는 것을 의미했다. 최근에는 크롤링을 '웹에서 데이터를 얻는 것 전체'를 크롤링으로 정의하는 경향이 있다. 개인적으로는 결과적으로 자동화된 봇을 만들어 웹에서 데이터를 수집하는 것이 목표이다! Beautiful Soup는 그 시작이라고 할 수 있을 것이다.
Beautiful Soup은 html태그로 되어 있는 문서를 해석하는 기능을 가진 파이썬 모듈이다.
1. pip install bs4 명령어로 bs(Beautiful Soup)를 설치한다.
2. Beautiful Soup은 보통 from bs4 import BeautifulSoup 명령어로 불러온다.
from bs4 import BeautifulSoup
page = open('../data/03. test_first.html', 'r').read()
soup = BeautifulSoup(page, 'html.parser')
print(soup.prettify())

* 간단한 html파일을 하나 로드해봤다. html태그에 따라 작성되어 있는 것을 볼 수 있다. bs4는 태그에 따라 필요한 내용을 읽어들인다.
open: 파일명과 함께 읽기(r), 쓰기(w)속성을 지정한다.
html.parser: Beautiful Soup의 html을 읽는 엔진 중 하나이다.(lxml도 많이 사용한다)
prettify(): html 출력을 예쁘게 만들어주는 기능이다.
3. soup.body()는 body태그 내의 요소들을 불러오는 기능이다.
4. soup.find('p')는 첫 번째 <p>태그를 불러온다.
5. soup.find_all('p')는 모든 <p>태그들을 불러온다.

6. soup.find_all(class_="") 명령어로 특정 class를 가진 요소들을 찾을 수 있다.

7. soup.find_all(id='')명령어로 특정 id를 가진 요소를 찾을 수도 있다.

* 단, html파일 내에서 속성 id는 딱 한 번만 나타난다.(중복된 id를 가져갈 일이 있다면 당연히 class속성을 사용한다) 따라서 find_all()함수는 id를 찾기에는 의미가 없다고 할 수 있다. 그러나, 만약 검색결과를 list로 받고자 한다면 id라도 find_all()함수를 사용할 수 있다.

8. find_all을 통해 하이퍼링크의 주소들을 알아내보자. soup.find_all('a')를 하면 해당 html파일에서 모든 a태그 내의 값들을 리스트 형식으로 불러온다. 그 정보에 for문을 통해 접근한다. href = each['href']를 통해 불러오고, 태그 내의 string값들은 text = each.string으로 불러온다.

9. 웹주소(url)에 접근할 때는 request 모듈이 필요하다. 예시를 들기 위해 네이버 금융 페이지를 불러와보았다.

10. 이제 html에서 환율 정보를 불러오면 된다.

'데이터분석 > 미니프로젝트 02. 웹 데이터 분석(크롤링)' 카테고리의 다른 글
| 미니프로젝트 02-01-04. 데이터 시각화 (0) | 2024.04.13 |
|---|---|
| 미니프로젝트 02-01-03. 시카고 맛집 데이터 하위 페이지 분석 (2) | 2024.04.13 |
| 미니프로젝트 02-01-02. 위키백과 문서 정보 가져오기, 시카고 맛집 메인페이지 분석 (0) | 2024.04.12 |