1. 웹사이트
구분 | 정적 웹사이트 | 동적 웹사이트 |
콘텐츠 | 고정된 HTML 파일로 구성되어 있어 모든 사용자에게 동일한 내용을 보여줌 | 사용자 요청에 따라 실시간으로 생성되어 개인화된 내용을 제공 할 수 있음 |
서버 처리 | 서버는 단순히 미리 작성된 파일을 전송함 | 서버에서 스크립트를 실행하여 동적으로 콘텐츠를 생성 |
데이터베이스 | 일반적으로 데이터베이스를 사용하지 않음 | 대부분 데이터베이스를 사용하여 정보를 저장하고 검색 |
상호작용 | 사용자와의 상호작용이 제한적 | 사용자와 다양한 방식으로 상호작용할 수 있음 |
로딩 속도 | 일반적으로 빠름 | 정적 웹사이트보다 상대적으로 느릴 수 있음 |
2. 웹 크롤링 기호: '뉴스 헤드라인 수집'
- Requests 라이브러리
Python용 HTTP 라이브러리를 말한다. HTTP는 웹 브라우저와 서버 간 데이터 전송 프로토콜을 말한다.
!pip install requests
import requests
r = requests.get('https://www.naver.com')
print(r.text)
- BeautifulSoup4 라이브러리
HTML과 XML 파일에서 데이터를 추출하는 Python 라이브러리를 말한다. 웹 스크래핑과 파싱에 유용하다.
!pip install beautifulsoup4
from bs4 import BeautifulSoup
import requests
# 웹 페이지 가져오기
r = requests.get('https://zdnet.co.kr/newskey/?lstcode=%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5')
# BeautifulSoup 객체 생성
soup = BeautifulSoup(r.text, 'html.parser')
# 단일 요소 선택
element = soup.select_one('body > div.contentWrapper > div > div.left_cont > div.news_box > div:nth-child(1) > div.assetText > a')
# 여러 요소 선택
elements = soup.select('body > div.contentWrapper > div > div.left_cont > div.news_box > div > div.assetText > a')
# 특정 속성 값 추출
href = elements[0]['href']
# 텍스트 내용 추출
text = soup.select('body > div.contentWrapper > div > div.left_cont > div.news_box > div > div.assetText > a > h3')[0].text
print(f"링크: {href}")
print(f"제목: {text}")
# 페이지 이동
# URL에 페이지 번호 파라미터 추가
<https://zdnet.co.kr/newskey/?lstcode=%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&page=2>
# XML 데이터 가지고 오기
import requests
from bs4 import BeautifulSoup
import csv
# 구글 뉴스 RSS 피드 URL
url = "https://news.google.com/rss?hl=ko&gl=KR&ceid=KR:ko"
# 웹 페이지 내용 가져오기
response = requests.get(url)
# HTML 파싱하기
soup = BeautifulSoup(response.content, 'xml')
# 뉴스 항목 찾기
items = soup.find_all('item')
headlines = []
# 처음 10개의 헤드라인만 처리
for item in items[:10]:
headline = {
'title': item.title.text,
'link': item.link.text,
'pubDate': item.pubDate.text
}
headlines.append(headline)
# CSV 파일로 저장하기
filename = 'headlines.csv'
with open(filename, 'w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=['title', 'link', 'pubDate'])
writer.writeheader()
writer.writerows(headlines)
print("Headlines saved to headlines.csv")
'Today I Learned (TIL) > Python' 카테고리의 다른 글
[TIL] 데이터 시각화 - Matplotlib (4) | 2024.07.22 |
---|---|
[TIL] Python 챌린지 - 2회차 (0) | 2024.07.19 |
[TIL] 데이터 전처리 - Pandas(3) (0) | 2024.07.17 |
[TIL] 데이터 전처리 - Pandas(2) (0) | 2024.07.17 |
[TIL] 데이터 전처리 - Pandas(1) (0) | 2024.07.17 |