반응형
BeautifulSoup이란?
- HTML 파서이다
- HTML로부터 데이터를 추출하기 위해 사용한다
- 웹 스크래핑에 유용하다
현재 Beautiful Soup3는 더 이상 개발되지 않고(2021년 1월 1일 중단), Beautiful Soup4를 사용하면 된다.
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
설치
pip install beautifulsoup4
requests 란?
- HTTP 라이브러리이다.
- 웹 스크래핑
- API 개발
- 일반 웹 개발 작업에 널리 사용
https://requests.readthedocs.io/en/latest/
설치
pip install requests
예) 네이버 뉴스 검색
from bs4 import BeautifulSoup
import requests
#웹크롤링주소는 https://search.naver.com/search.naver?where=news&query=검색어 형태이다.
#검색어를 입력 받아 처리하는 혙태로 url 주소를 입력한다.
search_text = input("검색어:")
url = "https://search.naver.com/search.naver?where=news&query=" + search_text
result = requests.get(url)
#print(result) #해당 사이트의 상태를 보여준다. 200이면 정상이다.
#print(result.text) #html 소스가 출력된다.
soup = BeautifulSoup(result.text, "html.parser") #html 소스를 파싱한다.
items = soup.select(".news_tit") #find 방식도 있음
#print(items) #클래스가 news_tit인것을 모두 보여준다
for item in items:
print(item.text, item.get('href')) #반복문을 사용하여 텍스트와 href 속성 값인 UTL주소를 보여준다
예) 기상청 날씨 파이썬으로 가져오기
from urllib.request import urlopen, Request #라이브러리 불러오기
#도시별 날씨 검색 함수
def get_weather(city):
#기상청 홈페이지 도시별 날씨
url = 'https://www.weather.go.kr/w/obs-climate/land/city-obs.do'
page=urlopen(url=url)
text=page.read().decode('utf-8')
text = text[text.find(f'>{city}</a'):]#>부산</a> html 코드 있는부분 찾아옴
# 기온 가져오기(기상청 홈페이지 7번째 칸)
for i in range(7): #기상청 홈페이지의 7번째칸 가져오고
text=text[text.find('<td>')+1:]
start=3
end=text.find('</td>')
current_temp=text[start:end]
print(f'{city}의 현재 기온은 {current_temp}˚C 입니다.')
# 습도 가져오기(기상청 홈페이지 10번째 칸)
for i in range(3): #7번째 이후 3번째 뒤 10번째 칸 가져오게됨
text=text[text.find('<td>')+1:]
start=3 #html 코드 td> 뒷부분에 실제 내용부터 가져오겠다
end=text.find('</td>')
current_humid=text[start:end]
print(f'{city}의 현재 기온은 {current_humid}% 입니다.')
get_weather('서울') #input으로 처리가능함
반응형
'파이썬(Python)' 카테고리의 다른 글
PyAutoGUI 활용 마우스 제어 (0) | 2023.06.08 |
---|---|
파이썬 GUI 모듈 (0) | 2023.04.28 |
파이썬 메모이제이션 (Python memoization) (0) | 2023.03.12 |
Python map이란 (0) | 2023.03.12 |
파이썬 리스트(List) vs 튜플(Tuple) vs 딕셔너리(Dictionary) vs 집합(Set) (0) | 2023.03.09 |
댓글