기록방
파이썬 웹 크롤링 교재 #2 본문
"한입에 웹 크롤링 프알못의 파이썬 데이터 수집 자동화 한 방에 끝내기"
5장 크롤러 만들기
인터넷에서 데이터를 수집하여 받아오는 것을 크롤링 또는 스크랩핑이라고 한다(정확히는 차이가 있음)
크롤러 : 크롤링을 하는 프로그램
크롬 설치
크롤러를 만들때 크롬 개발자 도구가 필요함
urllib 패키지
- urllib는 파이썬에서 인터넷에서 데이터를 받아 오는 기능들이 들어 있는 패키지
- 기본 urllib는 내장되어 있어 import하면 바로 사용 가능
- 그 외 다른 버전은 패키지 검색 후 설치
네이버 크롤링 해보기
- 주소 : https://www.naver.com
- 우클릭 → ‘페이지 소스 보기’
- <html>태그가 있으면 HTML 형식임 (HTML형식으로 작성한 페이지 : HTML문서)
- 웹 브라우저는 텍스트 형태의 HTML문서를 렌더링(rendering) 해주는 프로그램
- 웹 페이지를 크롤링하면 소스코드 형태의 텍스트 데이터이므로, 필요한 데이터를 뽑아내야함(파싱)
- 크롤링, 파싱, 스크래핑이 ‘인터넷에서 무언가 데이터를 받아서 필요한 정보만 뽑아 내는 것’으로 혼용되기도 함
- 교재는 데이터를 받아오는 것 까지를 ‘크롤링’, 받아온 데이터에서 필요한 정보를 뽑는걸 ‘파싱’이라고 구분 할 것임
- 네이버 크롤링 코드 실행
- 결과 : 엄청 긴 텍스트, 무수히 많은 태그들
- 첫줄은 b`<!doctype html>로 시작 (위 소스코드 보기에서도 <!doctype html>로 시작)
from urllib.request import urlopen
url = "https://www.naver.com/"
html = urlopen(url)
print(html.read())
트리 구조
들여쓰기로 나타낼 수 있음 (책 1장 아래 1절과 2절, 2장 아래에 1절과 2절 …)
뷰티풀솝 사용 방법
- BeautifulSoup(뷰티풀솝)은 데이터를 추출하는 데 필요한 기능이 들어 있는 라이브러리
- 파싱(parsing)라이브러리라고도 함
- 설치 : File→Settings→Python Interpreter(검색가능)→’+’버튼→’bs4’검색→install
- 파싱 테스트 코드 1
import bs4
html_str = "<html><div>hello</div></html>"
bs_obj = bs4.BeautifulSoup(html_str, "html.parser")
print(type(bs_obj))
print(bs_obj)
print(bs_obj.find("div"))
# 결과 #
# <class 'bs4.BeautifulSoup'>
# <html><div>hello</div></html>
# <div>hello</div>
- 파싱 테스크 코드 2
import bs4
html_str = """
<html>
<body>
<ul>
<lib>hello</li>
<li>bye</li>
<li>welcom</li>
</ul>
</body>
</html>
"""
bs_obj = bs4.BeautifulSoup(html_str, "html.parser")
ul = bs_obj.find("ul")
print(ul)
# 결과 #
# <ul>
# <lib>hello
# <li>bye</li>
# <li>welcom</li>
# </lib></ul>
조금 더 html 문서같은 텍스트로 find 해보기
<생략>
ul = bs_obj.find("ul")
li = ul.find("li")
print(li)
# 결과 #
# <li>hello</li>
find 결과에 한 번 더 find를 사용
<생략>
ul = bs_obj.find("ul")
li = ul.find("li")
print(li.text)
# 결과 #
# hello
text만 뽑으면 태그를 지울 수 있음
findAll() 사용하기
- .findAll() : 조건에 해당하는 모든 요소를 리스트[] 형태로 추출
- .find()는 만나는 첫 태그를 리턴하지만 .findAll()은 조건에 해당하는 모든 요소를 []로 리턴
- ul안의 li가 0개거나 3개여도 모두 리스트[] 형태로 리턴
import bs4
html_str = """
<html>
<body>
<ul>
<li>hello</li>
<li>bye</li>
<li>welcom</li>
</ul>
</body>
</html>
"""
bs_obj = bs4.BeautifulSoup(html_str, "html.parser")
ul = bs_obj.find("ul")
lis = ul.findAll("li")
print(lis)
# 결과 #
# [<li>hello</li>, <li>bye</li>, <li>welcom</li>]
인덱스로 데이터 접근하기
- bye를 출력해보자
import bs4
html_str = """
<html>
<body>
<ul>
<li>hello</li>
<li>bye</li>
<li>welcom</li>
</ul>
</body>
</html>
"""
bs_obj = bs4.BeautifulSoup(html_str, "html.parser")
ul = bs_obj.find("ul")
lis = ul.findAll("li")
print(lis[1].text)
# 결과 #
# bye
태그와 속성 그리고 속성값
뷰티풀솝을 사용하려면 tag(태그)와 propertty(속성), HTML에 대한 지식이 필요
- tag(태그) : <>로 감싸져있음
- propertty(속성) : <ul class=”greet”>에서 class가 속성, “greet”는 속성값
- 자주 사용하는 속성 : class, id, href, title 등
728x90
'웹 크롤링' 카테고리의 다른 글
백준 문제 등급 별 목록 가져오기 (0) | 2022.10.13 |
---|---|
백준 문제 크로스체크 프로그램 (0) | 2022.10.01 |
파이썬 웹 크롤링 교재 #3 (0) | 2022.09.29 |
파이썬 웹 크롤링 교재 #1 (0) | 2022.09.21 |