[Python] 나도코딩 웹 스크래핑편 - (16) 퀴즈2
Updated:
유튜브 나도코딩 웹 스크래핑 무료 강의를 통해 학습한 내용을 정리해서 올리고 있습니다.
실습과정에서 필요에 따라 일부 강의 내용의 누락 및 추가, 수정사항이 있습니다.
퀴즈의 경우, 유튜브 풀이와 상이할 수 있습니다.
Quiz
웹 스크래핑을 이용하여 나만의 비서를 만드시오.
[조건]
-
네이버에서 오늘 서울의 날씨정보 가져오기
-
헤드라인 뉴스 3건 가져오기
-
IT 뉴스 3건 가져오기
1. 네이버 날씨
from bs4 import BeautifulSoup
import requests
def weather_scrape():
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36",
"Accept-Language":"ko-KR,ko"
}
# 네이버: 분당 날씨 링크
url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EC%84%9C%EC%9A%B8+%EB%82%A0%EC%94%A8&oquery=%EB%B6%84%EB%8B%B9+%EB%82%A0%EC%94%A8&tqi=hKuVAwprvxsssFXannwsssssszw-158329"
res = requests.get(url, headers=headers)
res.raise_for_status()
soup = BeautifulSoup(res.text, "lxml")
weather = soup.find("div", attrs={"class":"weather_area _mainArea"})
# 날씨 정보
w1 = weather.find("div", attrs={"class":"main_info"})
today_text = w1.find("p", attrs={"class":"cast_txt"}).get_text()
today_temp = w1.find("p", attrs={"class":"info_temperature"}).get_text().strip().replace("도씨","")
min_temp = w1.find("span", attrs={"class":"min"}).get_text()
max_temp = w1.find("span", attrs={"class":"max"}).get_text()
# 미세먼지 정보
w2 = weather.find("div", attrs={"class":"sub_info"})
dust_1 = w2.find_all("dd")[0].find("span", attrs={"class":"num"}).get_text()
dust_2 = w2.find_all("dd")[1].find("span", attrs={"class":"num"}).get_text()
# 강수 정보
w3 = weather.find("div", attrs={"class":"table_info weekly _weeklyWeather"})
rain_morning = w3.find_all("span", attrs={"class":"rain_rate"})[0].get_text().strip()
rain_afternoon = w3.find_all("span", attrs={"class":"rain_rate"})[1].get_text().strip()
print("[오늘의 날씨]\n")
print(f"{today_text}")
print(f"현재 {today_temp} (최저 {min_temp} / 최고 {max_temp})")
print(f"오전 {rain_morning} / 오후 {rain_afternoon}\n")
print(f"미세먼지 {dust_1}\n초미세먼지 {dust_2}")
weather_scrape()
[오늘의 날씨]
구름많음, 어제보다 3˚ 높아요
현재 26℃ (최저 20˚ / 최고 32˚)
오전 강수확률 10% / 오후 강수확률 0%
미세먼지 54㎍/㎥
초미세먼지 34㎍/㎥
-
원하는 형식으로 출력이 잘 된다.
-
나는 서울 날씨를 기준으로 작성하였는데 url을 다른 지역 날씨로 해도 당연하지만 잘 작동 된다.
2. 헤드라인 뉴스
def head_news():
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36",
"Accept-Language":"ko-KR,ko"
}
# 네이버 뉴스
url = "https://news.naver.com"
res = requests.get(url, headers=headers)
res.raise_for_status()
soup = BeautifulSoup(res.text, "lxml")
head_news = soup.find("ul", attrs={"class":"hdline_article_list"}).find_all("li", limit=3)
print("[헤드라인 뉴스]")
for i, news in enumerate(head_news):
news_info = news.find("a")
print(str(i+1) + ".", news_info.get_text().strip())
link = url + news_info["href"]
print(f"링크: {link}")
head_news()
[헤드라인 뉴스]
1. "男알몸 촬영·유포자는 29세 김영준"…피해자 1천300명
링크: https://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=102&oid=016&aid=0001846449
2. 감사원 "국회의원은 감찰 대상 아냐…투기 조사 못한다"
링크: https://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=100&oid=214&aid=0001124050
3. 송영길 “내 친구 우상호…한열이 추도식 못 와 마음 찢어져”
링크: https://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=100&oid=020&aid=0003362913
-
네이버 헤드라인 뉴스를 3가지 출력하였다.
-
다만 네이버 뉴스 홈페이지에 접속하면 새로고침 할 때 마다 헤드라인 뉴스가 계속 바뀐다.
-
따라서 코드를 다시 실행할 때마다 출력 결과 역시 같이 바뀐다.
3. IT 뉴스
def it_news():
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36",
"Accept-Language":"ko-KR,ko"
}
# 네이버 IT 뉴스
url = "https://news.naver.com/main/list.nhn?mode=LS2D&mid=shm&sid1=105&sid2=230"
res = requests.get(url, headers=headers)
res.raise_for_status()
soup = BeautifulSoup(res.text, "lxml")
head_news = soup.find("ul", attrs={"class":"type06_headline"}).find_all("li", limit=3)
print("[IT 뉴스]")
for i, news in enumerate(head_news):
news_info = news.find_all("dt")[1].find("a")
print(str(i+1) + ".", news_info.get_text().strip())
link = news_info["href"]
print(f"링크: {link}")
it_news()
[IT 뉴스]
1. 넥슨 노조 "임금 삭감은 생활 공격…게임업계 사내면접 문화 바꿔야"
링크: https://news.naver.com/main/read.nhn?mode=LS2D&mid=shm&sid1=105&sid2=230&oid=421&aid=0005405102
2. 클라우드의 배반… 업체 한 곳 오류에 주요 언론·정부 사이트 마비
링크: https://news.naver.com/main/read.nhn?mode=LS2D&mid=shm&sid1=105&sid2=230&oid=023&aid=0003619158
3. “LG폰보다 훨씬 낫다?”…LG 무선이어폰 신작 미리보니
링크: https://news.naver.com/main/read.nhn?mode=LS2D&mid=shm&sid1=105&sid2=230&oid=016&aid=0001846499
-
네이버 IT 뉴스를 3가지 출력하였다.
-
헤드라인 뉴스 코드와 거의 똑같다.
Leave a comment