기록방

파이썬 웹 크롤링 교재 #2 본문

웹 크롤링

파이썬 웹 크롤링 교재 #2

Soom_1n 2022. 9. 21. 23:43

"한입에 웹 크롤링 프알못의 파이썬 데이터 수집 자동화 한 방에 끝내기"

 

한입에 웹 크롤링 - 교보문고

프알못의 파이썬 데이터 수집 자동화 한 방에 끝내기 | 인터넷에서 데이터를 수집하여 받아오는 것을 크롤링 또는 스크래핑이라고 하고, 크롤링을 하는 프로그램을 크롤러라고 합니다. 웹 크롤

www.kyobobook.co.kr

 

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 등

 

원본 노션 정리 글

 

파이썬 웹 크롤링 교재 #2

5장 크롤러 만들기

probable-legume-162.notion.site

 

728x90