공부한 내용 정리하는 공간입니다.
틀린 내용이 있을 수 있습니다.
모든 지적, 첨언 환영합니다.
오늘의 코드
1. 보안뉴스 웹사이트에서 모든 링크를 가져오기
2. 뉴스 헤드라인을 출력하기
from bs4 import BeautifulSoup
import requests
url = "http://www.boannews.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36'}
req = requests.get(url, headers=headers)
soup = BeautifulSoup(req.text, "lxml")
links = soup.find_all('a')
for link in links:
print(f"{link.text} 링크: {url}{link.get('href')}")
print("-"*20)
tags = soup.select('#headline1 > ul > li > p')
for tag in tags:
print(tag.string)
requests
HTTP 요청을 보내고 응답을 받는 데 사용되는 라이브러리
pip install requests 으로 설치 필요
웹 크롤링, API 연동 등에서 필수적으로 사용되는 라이브러리
get, post, put, delete 등 가능
.get()
HTML 요소에 접근하여 태그의 속성값을 얻을 때 사용
HTML요소.get(속성명) 형태로 사용
속성이 없는 경우 None 반환
.find_all()
특정 조건에 맞는 모든 HTML 요소를 찾는 데 사용
조건에 맞는 태그를 추출하여 리스트 형태로 반환
.fiind_all('태그의 이름') 형태로 사용
태그의 이름, 속성, ID, 정규표현식 등을 조건으로 사용할 수 있음
아무것도 찾지 못하면 빈 리스트를 반환
하나만 찾고 싶을 때는 .find() 사용, 아무것도 찾지 못하면 None을 반환
.select()
CSS 선택자를 사용하여 HTML 요소를 선택하는 방법
find_all()보다 더욱 세밀하게 선택할 수 있음
.select('CSS 선택자') 형태로 사용
조건에 맞는 요소를 리스트 형태로 반환
오늘의 코드
1. 보안뉴스 웹사이트에서 모든 링크를 가져오기
2. 뉴스 헤드라인을 출력하기
from bs4 import BeautifulSoup
import requests
url = "http://www.boannews.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36'}
req = requests.get(url, headers=headers)
soup = BeautifulSoup(req.text, "lxml")
links = soup.find_all('a')
for link in links:
print(f"{link.text} 링크: {url}{link.get('href')}")
print("-"*20)
tags = soup.select('#headline1 > ul > li > p')
for tag in tags:
print(tag.string)
오늘의 코드 결과

오늘의 코드 설명
1. 보안뉴스 웹사이트에서 모든 링크를 가져오기
from bs4 import BeautifulSoup
import requests
웹 크롤링에서 사용되는 라이브러리
url = "http://www.boannews.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36'}
크롤링할 웹 페이지를 url에 저장
HTTP 요청에 사용할 헤더 정보를 headers에 저장
User-Agent 설정이 되지 않으면 서버에서 비정상 요청으로 간주하여 차단하기 때문에 설정 필요
req = requests.get(url, headers=headers)
url에다가 headers를 담아서 요청을 보내고 서버가 반환한 응답을 req에 저장
soup = BeautifulSoup(req.text, "lxml")
req의 내용을 lxml 파서를 이용하여 파싱(구문 분석)하고 soup에 저장
links = soup.find_all('a')
soup에서 모든 <a> 태그를 찾아서 리스트 형태로 links에 저장
HTML에서 <a> 태그는 하이퍼링크를 정의할 때 사용
for link in links:
print(f"{link.text} 링크: {url}{link.get('href')}")
link.text : soup에서 찾은 <a> 태그 내부의 텍스트 내용
link.get('href') : soup에서 찾은 <a> 태그에서 href 속성값
2. 뉴스 헤드라인을 출력하기
tags = soup.select('#headline1 > ul > li > p')
#headline1 > ul > li > p : CSS selector(CSS 선택자)
CSS 선택자에 맞는 태그들을 리스트로 반환하여 tags에 저장
for tag in tags:
print(tag.string)
tag는 tags 안에서 반복
tag의 내용을 출력