[Python] requests, .get(), .find_all(), .select()

공부한 내용 정리하는 공간입니다.

틀린 내용이 있을 수 있습니다.

모든 지적, 첨언 환영합니다.

오늘의 코드

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의 내용을 출력