pip install requests
pip install beatifulsoup4
import requests
from bs4 import BeautifulSoup
html 문서요청: requsts.get("홈페이지 주소")
req = requests.get("https://m.blog.naver.com/luvpolo/221300832833")
요청결과를 content화
req.content
b'\n\n\n\n\n<!doctype html>\n<html lang="ko">\n<head prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#">\n\n\n\n\n\n<meta http-equiv="Content-type" content="text/html; charset=utf-8">\n<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">\n\n<meta name="robots" content="index,follow"/>\n\n\n\n<link rel="icon" type="image/png" href="/favicon_192x192.png?1">\n\n<link rel="apple-touch-icon-precomposed" href="/mobileweb_icon_96.png?1" />\n\n<link rel="stylesheet" type="text/css" href="https://ssl.pstatic.net/t.static.blog/nmobile/versioning/lego_w-189816406_https.css" charset="UTF-8" />\n<link rel="stylesheet" type="text/css" href="https://ssl.pstatic.net/t.static.blog/nmobile/versioning/lego_view-105403197_https.css" charset="UTF-8" />\n<style>\n\tdiv.spi_unity {\n\t\twidth:291px;\n\t}\n</style>\n\n\n\n\n\n \n\n\t\n\t\t<meta property="og:title"
req.text
'\n\n\n\n\n<!doctype html>\n<html lang="ko">\n<head prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#">\n\n\n\n\n\n<meta http-equiv="Content-type" content="text/html; charset=utf-8">\n<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">\n\n<meta name="robots" content="index,follow"/>\n\n\n\n<link rel="icon" type="image/png" href="/favicon_192x192.png?1">\n\n<link rel="apple-touch-icon-precomposed" href="/mobileweb_icon_96.png?1" />\n\n<link rel="stylesheet" type="text/css" href="https://ssl.pstatic.net/t.static.blog/nmobile/versioning/lego_w-189816406_https.css" charset="UTF-8" />\n<link rel="stylesheet" type="text/css" href="https://ssl.pstatic.net/t.static.blog/nmobile/versioning/lego_view-105403197_https.css" charset="UTF-8" />\n<style>\n\tdiv.spi_unity {\n\t\twidth:291px;\n\t}\n</style>\n\n\n\n\n\n \n\n\t\n\t\t<meta property="og:title" content="예쁜 한국말 /
soup이라는 변수에 BeatifulSoup을 통해 만들어진 객체를 저장
soup = BeautifulSoup(req.content, "html.parser")
soup 출력
print(soup)
# 결과: 깔끔 😃
<!DOCTYPE html>
<html lang="ko">
<head prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#">
<meta content="text/html; charset=utf-8" http-equiv="Content-type"/>
<meta content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover" name="viewport"/>
<meta content="index,follow" name="robots">
<link href="/favicon_192x192.png?1" rel="icon" type="image/png"/>
<link href="/mobileweb_icon_96.png?1" rel="apple-touch-icon-precomposed">
<link charset="UTF-8" href="https://ssl.pstatic.net/t.static.blog/nmobile/versioning/lego_w-189816406_https.css" rel="stylesheet" type="text/css"/>
<link charset="UTF-8" href="https://ssl.pstatic.net/t.static.blog/nmobile/versioning/lego_view-105403197_https.css" rel="stylesheet" type="text/css"/>
<style>
div.spi_unity {
width:291px;
}
</style>
<meta content="예쁜 한국말 / 예쁜 뜻이 담긴 순수 한국말 한글 단어" property="og:title">
<meta content="https://blogimgs.pstatic.net/nblog/mylog/post/og_default_image_160610.png" property="og:image"/>
📢
req.text
와req.content
의 차이
1️⃣
req.text: 응답의 내용을 웹페이지 유니코드(Unicode)로 표현
2️⃣
req.content: 응답의 내용을 바이트(bytes)로 표현
1️⃣
크롤링할 블로그에서 F12버튼 클릭
2️⃣
형광색 버튼 클릭
3️⃣
추출하고 싶은 내용 클릭 👉 단어가 어떤 태그로 구성되어 있는지 확인
ex) 가람슬기: 강처럼 푸르게, 그리고 슬기롭게: span으로 태그
1️⃣
html 문서 내 특정 태그 필터링: find
vs find_all
find
: 태그 중 웹페이지에서 가장 처음으로 등장하는 태그 반환
soup.find("span")
#결과
<span class="Nicon_service">블로그</span>
find_all
: 웹페이지 내 모든 태그 반환
soup.find_all("span")
#결과
[<span class="Nicon_service">블로그</span>,
<span class="td">
<a class="_cur_category _returnFalse" href="#" id="_categoryName" onclick="nclk(this, 'pgn.blogname', '', '');">
<span class="sp ico">카테고리 이동</span>
</a>
</span>,
<span class="sp ico">카테고리 이동</span>,
2️⃣
태그의 리스트 좁히기
html 문서 구조 : tbody → tr[3] → td[2] → div → p → span
soup.find("tbody").find_all("span")
#결과
[<span class="se-fs- se-ff-" id="SE-1bcdc575-3b76-497d-baf7-04a6cef06a37" style=""><b>예쁜 한국말! 예쁜 뜻이 담긴 순수 한국말</b></span>,
<span class="se-fs- se-ff-" id="SE-2e4161e0-814c-4afd-bb16-1874acae1580" style="">1</span>,
<span class="se-fs- se-ff-" id="SE-3b254fd9-a715-473c-a9b2-7b0e8618bd52" style="">가람: 강</span>,
3️⃣
태그 안의 내용만 들고오기 : 태그를 text화
span-list = soup.find("tbody").find_all("span")
span_list[0].text # 태그 👉 text
#결과
'예쁜 한국말! 예쁜 뜻이 담긴 순수 한국말'
4️⃣
for
문으로 모든 요소 text화
span_list2 = []
for span in span_list:
span_list2.append(span.text)
print(span_list2)
#결과
['예쁜 한국말! 예쁜 뜻이 담긴 순수 한국말', '1', '가람: 강', '2', '가람슬기: 강처럼 푸르게, 그리고 슬기롭게', '3', '가랑비: 조금씩 내리는 비', '4', '가온: 가운데', '5', '가온누리 : 어떠한 일이있어도 세상의 중심이되리라', '6', '가온누리: 세상의 중심', '7', '고수련: 병자를 정성껏 돌보는 일', '8', '고운 : 말 그대로 고운 삶을 살아라라는 뜻이 좋은 한글이름', '9', '고타야: 안동', '10', '괴다 : 유난히 귀엽게생각하여 사랑한다', '11', '그루잠: 깨었다가 다시 드는 잠', '12', '그린나래 : 그린듯이 어여쁜 날개를 뜻하는 순우리말 단어', '13', '그린나래: 그린 듯이 아름다운 날개', '14', '그린비: 그리운 남자', '15', '그미: 그 여자', '16', '길가온: 길 가운데',
5️⃣
필요 없는 부분 빼기 : del
이용
del span_list2[0]