header (Referer, User-Agent)
- user-agent: 어떤 사람이 어떤 디바이스로 접속했는지 접속 정보
- refer: 현재 표시하는 웹페이지가 어떤 웹페이지에서 요청하는지에 대한 정보. 일반 사용자인지, 해커 혹은 개발자인 지 알 수있다.
크롤링 & streamlit
# common/crawling.py
import requests
def do_crawling():
url = "https://n.news.naver.com/mnews/hotissue/article/011/0004440387?type=series&cid=2002544"
# header가 없으면 높은 확률로 접속이 거부됨.
header = {
# 어떤 사람이 어떤 디바이스 (pc or mobile, etc)에서 접속했는지 접속 정보 가짐.
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\
(KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
# 현재 표시하는 웹페이지가 어떤 웹페이지에서 요청되었는지
"Referer" : "https://news.naver.com/aside?oid=011"
}
response = requests.get(url=url, headers=header)
return "오류가 발생했어요" if response.status_code >= 400 else '성공했어요.'
# main.py
import streamlit as st
from common.crawling import do_crawling
st.title('크롤링 한번 해볼까?')
if st.button("크롤링 시작"):
res=do_crawling()
st.write(res)
네이트 판 글의 댓글 긁어오기
import requests
from bs4 import BeautifulSoup as bs
url = "https://pann.nate.com/talk/350939697"
header = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) \
Chrome/132.0.0.0 Safari/537.36",
"Referer":"https://shop.nate.com/"
}
response = requests.get(url=url,headers=header)
print(response)
if response.status_code>=400:
print('error!!')
print(response.text)
beautiful_text = bs(response.text,"html.parser")
beautiful_text
response.text #로 그냥 가져오면 일자로 가져온다.
#==> 너무 길어서 읽기도 힘들고 데이터 긁어오기도 힘들다. 그래서 필요한게 beautifulsoup
"""
<Response [200]>
<!DOCTYPE HTML>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>우리집 댕댕이 | 네이트 판</title>
<link href="/favicon.ico?m=3.3.26" type="image/x-icon" rel="shortcut icon" />
<link href="/pann_css/content_css.css?m=3.3.26" rel="stylesheet" type="text/css" media="all" charset="utf-8" /><link href="/css/common_pann_v4.css?m=3.3.26" rel="stylesheet" type="text/css" media="all" charset="utf-8" /><link href="/css/aticle_v3.css?m=3.3.26" rel="stylesheet" type="text/css" media="all" charset="utf-8" /><link href="/css/editor.css?m=3.3.26" rel="stylesheet" type="text/css" media="all" charset="utf-8" />
<link href="/images/nate_pann.png?m=3.3.26" rel="apple-touch-icon-precomposed" /><link href="/images/nate_pann.png?m=3.3.26" rel="apple-touch-icon" />
<script src="/js/common.js?m=2.2.8" type="text/javascript" ></script>
<script src="/js/jquery-1.9.1.js?m=2.2.8" type="text/javascript" ></script>
<script type="text/javascript" >
var j$ = jQuery.noConflict();
</script>
<!-- <script type="text/javascript" src="/js/prototype.js"></script> -->
<script src="/js/editor.js?m=2.2.8" type="text/javascript" ></script>
<script src="/flash/skiui.js?m=2.2.8" type="text/javascript" ></script>
<script src="//common.nate.com/textGNB/commonTextGNBV1?m=pann" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
// <![CDATA[
// 로그인 여부
IS_LOGGED = false;
// 로그인 한 후 리다이렉트할 페이지
REQUEST_URL = "https:\/\/pann.nate.com\/talk\/350939697";
...
<!-- 모바일 웹 보기 -->
</div>
</body></html>
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
"""
객체 가져오기
dd_list = beautiful_text.find_all("dd",class_="usertxt")
dd_list ## dd에서 댓글 리스트 가져온다.
dd_list[0].get_text().replace("\n","").strip()
# 우리 댕댕이ㅋ
Crawling Script
# common/crawling.py
import requests
from bs4 import BeautifulSoup as bs
def do_crawling():
url = "https://pann.nate.com/talk/350939697"
header = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) \
Chrome/132.0.0.0 Safari/537.36",
"Referer":"https://shop.nate.com/"
}
response = requests.get(url=url, headers=header)
return response
def get_text():
C:\dev\python\python-crawling\common\__pycache__ response = do_crawling()
if response.status_code>=400:
print('error!!')
return
beautiful_text = bs(response.text,"html.parser")
dd_list = beautiful_text.find_all("dd",class_="usertxt")
result = [dd.get_text().replace("\n","").strip()
for dd in dd_list ]
# dd_list[0].get_text().replace("\n","").strip()
return result
# main.py
import streamlit as st
from common.crawling import do_crawling
from common.crawling import get_text
st.title('크롤링 한번 해볼까?')
if st.button("크롤링 시작"):
res=get_text()
st.write(res)
와 진짜 크롤링할 때 개고생했는데 ㅠㅠ 이걸 스트림릿까지 연동하다니! 감동이다!
그보다 저거 객체 가져오는거, 이제 지피티에게 물어보면서 하면 좀 쉽지 않을까 싶다.
코딩이 좀 더 쉬워진 이제, 개념만 잘 알고 활용할 줄 안다면 개발은 더더 쉬워질 듯!
'개발공부 > SK Networks Family AI bootcamp 강의노트' 카테고리의 다른 글
12일차 [ Web Crawling2 ] (0) | 2025.01.22 |
---|---|
토이 프로젝트 일정 (자동 코인 매매 봇) (0) | 2025.01.21 |
11일차 [ streamlit ] (0) | 2025.01.21 |
첫 단위 프로젝트 [전국 자동차 등록 현황 및 기업 FAQ 조회 시스템] (0) | 2025.01.20 |
10일차 [DML 심화, streamlit과 mysql 연동] (0) | 2025.01.20 |