본문 바로가기
Language/Python

[Python] 파이썬 웹 크롤링 기초 BeautifulSoup, requests 사용법

by 시믈리에 2021. 7. 10.

서문


쉽게말해서 beautifulSoup 모듈은 html 문서에 필요한 내용을 분리 시켜 가져와주는 기능을 합니다.

우리가 대부분 인터넷에서 html 문서를 불러오기 때문에 웹에서html 문서를 불러줄 모듈이 필요하게 됩니다.

그 모듈이 requests입니다

--본 내용을 html , css 메커니즘을 이해한 상태에서 진행하는 설명입니다--

 

목차


  • requests
  •     ㄴ 다운로드 및 적용법
  •     ㄴ 웹 스크래핑
  •     ㄴ 응답코드
  •     ㄴstr 형변환
  • BeautifulSoup
  •     ㄴ 다운로드 및 적용법
  •     ㄴ Soup 객체 만들기
  •     ㄴ 시각화를 위한 html 예제
  •     ㄴ메서드
  •         ㄴ attrs
  •         ㄴ find
  •         ㄴ findAll
  •         ㄴ select
  •         ㄴ get_text

requests


  • requests모듈 다운로드 및 적용하기
pip install beautifulsoup4
  • import requests

 

  • 웹에서 html 문서 불러오기(res.get("[주소]"))
web = requests.get("https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EC%8B%9C%EA%B0%84
")

 

  • 응답 코드를 통해 정상으로 스크래핑이 되어있는지 여부를 판단 할수 있다(res.status_code)
#status_code 을 출력시 200이면 정상 403은 권한없음
res_tistory = requests.get("https://simlit.tistory.com/")
res_naver = requests.get("https://www.naver.com/")
res_tistory.status_code # 출력시 403 출력
res_naver.status_code # 출력시 200 출력

403은 권한이 없는 문제로 User Agent로 확인할수 있다

(User Agent 설명 링크) #글 쓰는데로 추가함

 

  • 불러온 문서의 텍스트 파일로 변환(res.text)
res_naver = requests.get("https://www.naver.com/")
print(res_naver.text)

 

 

 

BeautifulSoup


  • BeautifulSoup 다운로드 및 적용
pip install beautifulsoup4
from bs4 import BeautifulSoup

 

 

  • 웹에서 불러온 html 텍스트를 BeautifulSoup 객체로 변환
#웹에서 html 문서 가져오기
web = requests.get("https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EC%8B%9C%EA%B0%84
")

#텍스트 형식으로 변환
HtmlText = web.text

#뷰티플수프 객체로 변환(뷰티플 수프에 1번째 인수를 받을때 str 형식이여야 하기 때문에 윗 작업을 진행)
soup = BeautifulSoup(HtmlText, 'html.parser')

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>좋아하는 과일 리스트</title>
</head>
<body>
    <div class="header">
    	<p><a href=https://simlit.tistory.com/>사이트 블로그 주소</a></p>
    	</div>
    
    <div class="container">
    	<p><a href=https://namu.wiki/w/%EC%82%AC%EA%B3%BC>사과</a></p>
    	</div>
	
    <div class="footer">
    	<h3>복숭아 이동링크</h3>
    	</div>
</body>
</html>

 

  • [attrs] 이 메서드는 html 엘리먼트의 속성값을 튜플 형태로 보여주는 메서드 입니다
from bs4 import BeautifulSoup
with open('beautifulsoup.html',"r", encoding="utf8") as file_data:
    soup = BeautifulSoup(file_data, "html.parser")
----------------------------사전작업---------------------------------
    print(soup.meta.attrs)


결과 : {'charset': 'UTF-8'}

soup 뒤에 meta는 html태그를 의미합니다

핵심은 그 뒤에 attrs인데요

잠시 meta 태그를 보시면

<meta charset="UTF-8">

이렁 속성을 볼 수 있습니다

 

  • [find] [find_All] 내용 찾기 기능

find와 findAll은 같은 메커니즘 입니다

find(찾을 태그, ...), findAll(찾을태그, ...)

다른점은 전체를 찾아주는지 1가지만 찾아주는지 차이입니다

그래서 find메서드로 설명하겠습니다

 

from bs4 import BeautifulSoup
with open('beautifulsoup.html',"r", encoding="utf8") as file_data:
    soup = BeautifulSoup(file_data, "html.parser")
    print(soup.find("div"))

위 코드는 div 태그가 제일 위에있는 div 태그의 정보를 보여주게 됩니다

 

print(soup.find("div", attrs={"class":"header"}))

위 코드는 div태그를 찾는데 조건을 붇인겁니다

class 속성의 내용이 header인 부분을 찾아주게 됩니다

 

  • [select]
from bs4 import BeautifulSoup
with open('beautifulsoup.html',"r", encoding="utf8") as file_data:
    soup = BeautifulSoup(file_data, "html.parser")
    print(soup.select("div.header > p"))
    
 결과 : [<p><a href="https://simlit.tistory.com/">사이트 블로그 주소</a></p>]

div.header > p 부분은 css 선택자를 활용한 방법입니다

" . " = 클래스

" # " = 아이디

" > " = 하위 태그

저는 div태그에 class속성의 값인 header인 p태그를 프린트 하는 명령어 입니다

 

마지막


도움이 되셨으면 댓글에 글을 달아주시고 이해가 안되시면 이해가 안가시는 부분이 있으면 답해드리겠습니다

'Language > Python' 카테고리의 다른 글

bautifulsoup 예제를 위한 html 문서  (0) 2021.07.10

댓글