1. 사용자는 브라우저를 사용하여 www.velog.io 같은 url 입력을 통해 웹페이지 요청
2. 사용자의 요청 -> TCP 패킷으로 만들어짐
3. TCP패킷 -> IP 패킷으로 만들어짐 / IP패킷에는 자신의 IP주소와 도착해야될 상대방의 IP주소 정보가 포함 됨
4. IP패킷 -> 이더넷 카드로 보내져서 인터넷으로 전송 됨
5. 이더넷 패킷 -> 도착지의 컴퓨터 이더넷 카드로 전달 됨
6. 도착지의 이더넷 카드 -> IP프로토콜 계층에 해당 데이터 보냄
7. IP프로토콜 계층 -> TCP프로토콜 계층으로 데이터 보냄
8. TCP프로토콜 계층은 누락된 데이터가 없는지 확인하고, 데이터를 재조합한 후 -> Application Layer로 보냄
9. Application Layer에서 해당 데이터가 HTTP프로토콜로 작성돼 있으면 HTTP프로토콜 규칙에 준하여 사용자가 요청한 웹페이지를 웹서버가 제공
10. 웹서버가 제공한 웹페이지는 다시 TCP프로토콜 계층으로 전송되어 TCP패킷 -> IP패킷 -> 이더넷 카드 -> 요청된 컴퓨터 이더넷 카드 -> IP패킷 -> TCP패킷 -> HTTP 패킷의 과정을 거쳐 웹브라우저에 웹페이지가 전달 됨
11. 웹브라우저는 웹페이지 파일에 있는 HTML, CSS, javascript 등을 파싱하여 렌더링 작업을 거쳐 화면에 뿌려줌
import requests
from bs4 import BeautifulSoup
# 1.requests 라이브러리를 활용하여 HTML 페이지 요청
## res 객체에 HTML 데이터 저장
res = requests.get('https://v.daum.net/v/20170615203441266')
## res.content로 데이터 추출 가능
print(res.content)
# 2.BeautifulSoup 활용하여 HTML 페이지 파싱
soup = BeautifulSoup(res.content, 'html.parser')
# 3.필요한 데이터 검색
title = soup.find('title')
# 4.필요한 데이터 추출
print(title.get_text())
from bs4 import BeautifulSoup
html = """
<html>
<body>
<h1 id='title'>[1]크롤링이란?</h1>;
<p class='cssstyle'>웹페이지에서 필요한 데이터를 추출하는 것</p>
<p id='body' align='center'>파이썬을 중심으로 다양한 웹크롤링 기술 발달</p>
</body>
</html>
"""
soup = BeautifulSoup(html, "html.parser")
# 태그로 검색 방법
title_data = soup.find('h1')
print(title_data)
print(title_data.string)
print(title_data.get_text())
# 가장 먼저 검색되는 태그를 반환
p_data = soup.find('p')
print(p_data)
print(p_data.string)
print(p_data.get_text())
# 태그에 있는 id로 검색
title_data = soup.find(id='title')
print(title_data)
print(title_data.string)
print(title_data.get_text())
# HTML 태그와 CSS class를 활용해 필요한 데이터 추출 방법
p_data = soup.find('p', class_='cssstyle') # 'class_='은 생략 가능
print(p_data)
print(p_data.string)
print(p_data.get_text())
# HTML 태그와 태그에 있는 속성:속성값을 활용해 필요한 데이터 추출 방법
p_data = soup.find('p', attrs={'align':'center'})
print(p_data)
print(p_data.string)
print(p_data.get_text())
# find_all() 관련된 모든 데이터를 리스트 형태로 추출하는 함수
p_data = soup.find_all('p')
print(p_data)
print(p_data[0].get_text())
print(p_data[1].get_text())
import re
res = requests.get('https://v.daum.net/v/20170518153405933')
soup = BeautifulSoup(res.content, 'html.parser')
print(soup.find_all(string='오대석'))
print(soup.find_all(string=['[이주의해시태그-#네이버-클로바]쑥쑥 크는 네이버 AI', '오대석']))
print(soup.find_all(string='AI'))
print(soup.find_all(string=re.compile('AI'))[0])
#print(soup.find_all(string=re.compile('AI')))
import requests
client_key = '클라이언트 키'
client_secret = '클라이언트 비밀번호'
naver_url = 'https://openapi.naver.com/v1/search/news.json?query=스마트폰'
header_params = {"X-Naver-Client-Id":client_key, "X-Naver-Client-Secret":client_secret}
response = requests.get(naver_url, headers=header_params)
#print(response.json())
#print(response.text)
if(response.status_code == 200):
data = response.json()
print(data['items'][0]['title'])
print(data['items'][0]['description'])
else:
print("Error Code:"+response.status_code)
Exercise