성장 기록 블로그🌴
%1007 파이썬 웹크롤링 1일차 ( 빅데이터 , 웹 크롤링 개념 , 데이터 수집 , 네이버 메뉴 출력 , 뉴스 제목 내용 출력하기 ) 본문
AI & BigData 교육과정/Python 관련
%1007 파이썬 웹크롤링 1일차 ( 빅데이터 , 웹 크롤링 개념 , 데이터 수집 , 네이버 메뉴 출력 , 뉴스 제목 내용 출력하기 )
wlswls2s 2022. 10. 7. 16:57728x90
< 파이썬 웹크롤링 1일차 내용 >
◆ 파이썬 웹크롤링 기본
개념정리
# 빅데이터 – 정형 데이터(ex)공공데이터) + 비정형 데이터 (ex) 소셜데이터..)
디지털 환경에서 생성되는 수치 , 문자 , 이미지, 영상 데이터를 모두 포함하는 대규모 데이터
< 데이터 분석 과정>
데이터 수집&저장 -> 2. 데이터 처리&분석 -> 3. 데이터 시각화&응용
=> 우리는 데이터를 수집하고 저장함
< 웹 크롤링 >
웹 사이트의 내용에 접근하여 원하는 정보를 추출해 내는 행위
이를 이용해서 데이터들을 한번에 자동 크롤링을 하고 나중에 또 필요한 경우에는 코드를 실행만 해주면 최신의 데이터들도 한 번에 모을 수 있음
< 웹 크롤링을 위한 라이브러리 >
requests : 접근할 웹 페이지의 데이터를 요청 / 응답받기 위한 라이브러리
BeautifulSoup : HTML문서에서 원하는 데이터를 추출하기 쉽게 해주는 라이브러리
# 파이썬 웹크롤링 실습
# HTML 문서를 요청 / 응답을 받기 위한 라이브러리
import requests as req
# HTML 문서를 객체화 하기 위한 라이브러리 - BeautifulSoup
from bs4 import BeautifulSoup as bs
데이터 수집 할 웹페이지 정보 가져오기
# 데이터를 수집하기 위한 웹 페이지를 선정해야 한다.
url = "https://www.google.co.kr"
# url주소 값을 얻어옴
# google 웹 페이지 문서를 요청할게! <-> (서버)웹 페이지 데이터를 보내줄게~
res = req.get(url)
# 응답받은 데이터에서 웹 페이지 정보만 접근하기 ( 문자열 데이터 )
res.text
# => 이를 실행하면 구글 페이지에 있는 텍스트정보들을 싹 긁어오게됨
# 응답받은 데이터 타입 확인
type(res.text)
# 문자열 데이터인 str인 것을 확인 할 수 있3
< 출력 >
str
받아온 데이터 객체화 시키기
# HTML 문서 데이터(문자열 데이터)를 객체화 시키기!
# bs(HTML 문서 데이터, 객체화를 위한 변환 방식)
# 변환 방식 : lxml > html.parser > html.html
html = bs(res.text,'lxml')
html
type(html)
< 출력 >
bs4.BeautifulSoup
객체화 시킨 html문서에서 특정 요소 찾기
# html.find('요소명(태그)') : HTML 문서 내에서 특정 요소를 찾아줘!
# text 속성 : 요소가 가진 컨텐츠를 문자열로 접근
html.find('title').text
'Google'
# find같은 것 -> find에서는 요소명을 쓰지만
# select_one 함수는 CSS선택자를 누르면 이에 맞는 요소를 가져와줌.
# html.select_one("CSS선택자") : 입력한 선택자에 맞는 특정 요소를 찾아준다!
# 클래스명.이름 => 가져올정보는 페이지의 html정보에 들어가 가져올 클래스명가져오면됨
html.select_one("a.MV3Tnb")
# =>지금 구글에서 클래스 정보가 안가져와 져서 네이버로 변경
네이버에서 정보 가져오기
# 네이버 메인 페이지 요청하기
nv_url = "https://www.naver.com"
res = req.get(nv_url)
res
<출력>
<Response [200]>
=> 200이 뜨면 정상적으로 url값을 잘 가져온 것임
# 네이버 HTML 문서 데이터 => 객체화
html = bs(res.text , 'lxml')
html
# 네이버 메인에 있는 메뉴 중에 '메일' 컨텐츠를 가진 요소에 접근해보기
# 메일의 클래스명이 nav임.
#그냥 가져오기만 하면 html.select_one("a.nav")이지만
# 뒤에 .text를 붙이면 요소명만 출력
# select_one이기때문에 가장 먼저 발견되는 요소 하나만 가져옴 , find도 그럼.
html.select_one("a.nav").text
<출력>
'메일'
여기 목록의 요소들 다 가져와보기
# html.select("CSS 선택자") : 선택자와 일치한 모든 요소들을 접근한다
# 반환 자료형이 list임
menu = html.select("a.nav")
# menu는 리스트이기때문에 안에 모든 메뉴 목록을 가져오려면
# 반복문을 이용해서 출력해야함
print("< solution1 >")
# Solution 1:
for i in menu :
print(i.text)
print()
print("< solution2 >")
# Solution 2:
for i in range(0,16):
print(menu[i].text)
< solution1 >
메일
카페
블로그
지식iN
쇼핑
쇼핑LIVE
Pay
TV
사전
뉴스
증권
부동산
지도
VIBE
도서
웹툰
< solution2 >
메일
카페
블로그
지식iN
쇼핑
쇼핑LIVE
Pay
TV
사전
뉴스
증권
부동산
지도
VIBE
도서
웹툰
네이버 뉴스 데이터 수집 실습
< 뉴스 제목, 내용 수집하기 과정 >
1. 데이터 수집할 뉴스 페이지 선정 -> url 변수에 저장
2. 웹 서버에 웹 페이지 요청 -> req.get(url)
3. HTML문서 -> 객체화 -> bs(res.text , 'lxml')
4. 필요한 데이터를 가진 요소에 접근 -> select_one() or select()
1. 데이터 수집할 뉴스 페이지 선정
< 가져 올 뉴스 >
https://n.news.naver.com/mnews/article/079/0003693747?sid=103
2. 웹 서버에 웹 페이지 요청 - user-agent 받기
# 서버에는 사용자임을 검증하는 특정한 값이 있다. => 그 값: User-Agent
# User-Agent : 브라우저 관련 정보를 보관하고 있는 변수
# 확인하는 방법 : 개발자도구 -> 네트워크 -> 특정파일선택 -> request headers영역
# 이 방법으로 request-headers에 있는 user-agent를 가져와야함
# 이 정보를 딕셔너리로 담음
# user-agent : 브라우저를 통해 요청하는 거야! 라고 서버에게 인지시키기 위한 값으로 활용
h = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"}
2. 웹 서버에 웹 페이지 요청
-> url 변수에 저장 & req.get(url)
news_url = "https://n.news.naver.com/mnews/article/079/0003693747?sid=103"
# 뉴스 url을 가져왔을 때 바로 가져와지는게 아니라 서버에서 검증을 걸쳐서
# 그냥 가져오면 connect error가 떠서 안가져와짐
# 확인하는 방법 : 개발자도구 -> 네트워크 -> 특정파일선택 -> request headers영역
# get 할 때 headers = 담았던 user-agent인 h를 지정해줌
res = req.get(news_url, headers = h)
res
<Response [200]>
3. HTML문서 -> 객체화 -> bs(res.text , 'lxml')
html = bs(res.text , 'lxml')
html
4. 필요한 데이터를 가진 요소에 접근
-> select_one() or select()
제목 가져오기
newstitle = html.select_one("h2.media_end_head_headline").text
print(newstitle)
내용 가져오기
newscontents = html.select("#dic_area.go_trans._article_content")
for i in newscontents :
print(i.text)
< 뉴스 제목과 내용 출력해보기 >
print("====뉴스 제목====")
print(newstitle)
print("")
print("====뉴스 내용====")
for i in newscontents :
print(i.text)
< 뉴스 제목&내용 출력 결과 >
====뉴스 제목====
"이동을 넘어 생활공간으로"…아우디, '어반스피어 콘셉트' 선보여
====뉴스 내용====
핵심요약어반스피어, 레벨4 수준 자율주행 기술 탑재…미래 모빌리티 제시목적지 정보 활용해 사용자 픽업 및 스스로 주차·충전도 가능
아우디 어반스피어 콘셉트. 김승모 기자 아우디가 미래 모빌리티 비전과 계획을 밝히면서 레벨4 수준의 자율주행 콘셉트카 '아우디 어반스피어 콘셉트'를 국내 처음으로 선보였다.어반스피어는 운전자 조작 없이 주행이 가능해 단순히 이동 수단에 그치는 것이 아니라 또 다른 생활공간을 제공하는 미래 모빌로 티의리티의 모습을 제시했다.
아우디 어반스피어 콘셉트. 김승모 기자 아우디코리아는 7일 서울 강남구 신사동 가로수길에 브랜드 전시관 '하우스 오브 프로그레스(House of Progress)에서 어반스피어 콘셉트를 공개했다.어반스피어는 앞서 아우디가 공개한 2인승 쿠페 '스카이스피어 콘셉트', 4인승 쿠페 '그랜드스피어 콘셉트'와 함께 미래 모빌리티 시장에서 아우디가 나아갈 방향을 제시하고 있다.아우디코리아 박영준 상무는 "어반스피어는 잠재 고객의 의견을 반영해 개발부터 함께 했다"며 "대도시 교통정체 속에서 이동 수단만이 아닌 또 다른 생활공간이 될 수 있다"고 소개했다.
아우디코리아 박영준 상무가 7일 브랜드 전시관 '하우스 오브 프로그레스'에서 열린 미디어 간담회에서 '아우디 어반스피어 콘셉트'를 소개하고 있다. 김승모 기자 박 상무는 "레벨4 자율주행 기술을 기반으로 차량은 목적지 정보를 활용해 사용자를 픽업하고 스스로 주차 공간을 찾아 주차까지 가능하다"고 설명했다.어반스피어는 전체 스피어 시리즈 중 가장 크고 가장 최근에 선보인 콘셉트카이다. 전체적으로 매끄럽고 불필요한 라인이 없다는 점이 독특하다. 전면부 그릴과 후면부에 적용된 디지털 라이트는 미래지향적 이미지가 돋보인다. 내부 좌석은 회전이 가능해 운전자 편의성을 높였으며 개인용 디스플레이를 탑재해 엔터테인먼트 콘테츠 등을 즐길 수 있도록 했다.
아우디 어반스피어 콘셉트. 김승모 기자 어반스피어는 개발 초기부터 잠재 고객과 함께 진행한 프로젝트다. 고객의 요구와 아이디어를 함께 공유하면서 반영했다.아우디 AG 최초의 여성 익스테리어 디자이너인 박슬아 디자이너는 "디자인 프로젝트는 매우 높은 보안이 필요하지만, 어반스피어는 고객의 요구와 아이디어를 함께 공유하면서 반영했다"고 말했다.
아우디 어반스피어 콘셉트. 김승모 기자 어반스피어는 철저히 탑승자 중심으로 설계된 콘셉트카로 넉넉한 실내 공간은 때로 라운지와 모바일 오피스로 활용할 수 있다. 독립적으로 주차공간을 찾아 배터리를 충전하는 일도 가능하다고 아우디코리아 측은 설명했다.어반스피어 콘셉트 등을 볼 수 있는 하우스 오브 프로그레스는 오는 16일까지 열린다.※CBS노컷뉴스는 여러분의 제보로 함께 세상을 바꿉니다. 각종 비리와 부당대우, 사건사고와 미담 등 모든 얘깃거리를 알려주세요.이메일 : jebo@cbs.co.kr카카오톡 : @노컷뉴스사이트 : https://url.kr/b71afn
728x90
'AI & BigData 교육과정 > Python 관련' 카테고리의 다른 글
%1008 파이썬 웹크롤링 2일차! ( 네이버 영화 리뷰 수집, 영화 공조2 리뷰 , 파일 읽고 쓰기 , WordCloud 라이브러리 ) (1) | 2022.10.08 |
---|---|
%1007 파이썬 웹크롤링 실습 - ( 멜론 차트에 있는 노래 제목과 가수 출력 하기 ! ) (0) | 2022.10.07 |
%1006 파이썬 최종 실습 예제 ( 빅데이터 , 데이터 관리 , 데이터 분석 ) - 광주 범죄 현황 데이터로 범죄 증감율 예측해보기! (0) | 2022.10.06 |
%1006 파이썬 뿌시기 마지막 일차! (Pandas 라이브러리 응용 예제 , population , score) (0) | 2022.10.06 |
%1005 파이썬 뿌시기 5일차! (Pandas) (0) | 2022.10.05 |