서문
쉽게말해서 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 |
---|
댓글