selenium_quiz2

2023. 5. 1. 15:16·python/python_selenium

- 웹스크래핑을 이용하여 나만의 비서를 만들기 -

  1. 네이버에서 오늘 서울의 날씨 정보를 가져옴.
  2. 다음 뉴스 홈에서 뉴스 3건을 가져옴 (헤드라인이 현재 사라짐)
  3. it뉴스 3건을 가져옴.
  4. 해커스 어학원 홈페이지에서 오늘의 회화 지문을 가져옴.
# 웹스크래핑을 이용하여 나만의 비서를 만들기
# 1. 네이버에서 오늘 서울의 날씨 정보를 가져옴.
# 2. 다음 뉴스 홈에서 뉴스 3건을 가져옴 (헤드라인이 현재 사라짐)
# 3. it뉴스 3건을 가져온다.
# 4. 해커스 어학원 홈페이지에서 오늘의 회화 지문을 가져온다.

from bs4 import BeautifulSoup
import requests
import random
import re

def create_soup(url):
    print("="*50)
    header = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"}
    res = requests.get(url, headers=header)
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "lxml")
    return soup

def naver_weather():
    # 1. 네이버에서 오늘 서울의 날씨 정보를 가져옴.
    url = "<https://search.naver.com/search.naver?query=%EB%82%A0%EC%94%A8>"
    soup = create_soup(url)

    temp_up = soup.select_one("span.temperature.up").get_text()
    weather = soup.select_one("span.weather.before_slash").get_text()
    temp_today = soup.select_one("span.temperature_inner").select("span")
    low_temp_today = temp_today[0].get_text()
    hight_temp_today = temp_today[2].get_text()
    temp_now = soup.select_one("div.temperature_text").get_text()

    rain_today = soup.find("div", attrs = {"class":"cell_weather"})\\
        .find_all("span", attrs={"class":"rainfall"})
    hazy = soup.select(".item_today.level1")
    print
    print("[오늘의 날씨]")
    print(f"{weather}, 어제보다 {temp_up}")
    print(f"현재 {temp_now}(최저 {low_temp_today} / 최고 {hight_temp_today})")
    print(f"오전 강수 확률 {rain_today[0].get_text()} / 오후 강수 확률 {rain_today[1].get_text()}\\n")
    print(f"{hazy[0].find('a').get_text().strip()}")
    print(f"{hazy[1].find('a').get_text().strip()}")

def daum_headline_news():
    # 2. 다음 뉴스 홈에서 뉴스 3건을 가져옴
    url = "<https://news.daum.net/>"
    soup = create_soup(url)

    # 뉴스 리스트를 받아옴
    news_list = soup.find("ul", attrs={"class":"list_newsissue"})
    # find_all(element, limit = n) : n개까지 찾음.
    news_title_list = news_list.find_all("strong", attrs={"class":"tit_g"},limit=10)
    # 랜덤 3개의 뉴스를 가져옴.
    nums = random.sample(range(1, len(news_title_list)),3)
    print("[헤드라인 뉴스]")
    for n, num in enumerate(nums):
        print(f"{n+1}. {news_title_list[num].get_text().strip()}")
        print(f"(링크 : {news_title_list[num].a['href']})")

def naver_it_news():
    # 3. it뉴스 3건을 가져온다.
    url = "<https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105>"
    soup = create_soup(url)

    # 뉴스 리스트를 받아옴
    news_list = soup.find_all("div", attrs={"class":"cluster_text"})
    print("[IT 뉴스]")
    # 그중 최상위 3개의 뉴스 제목 및 링크를 가져옴
    for n in range(0,3):
        print(f"{n+1}. {news_list[n].find('a').get_text().strip()}")
        print(f"(링크 : {news_list[n].a['href']})")

def hackers():
    # 4. 해커스 어학원 홈페이지에서 오늘의 회화 지문을 가져온다.
    url = "<https://www.hackers.co.kr/?c=s_eng/eng_contents/I_others_english&keywd=haceng_submain_lnb_eng_I_others_english&logger_kw=haceng_submain_lnb_eng_I_others_english#;">
    soup = create_soup(url)

    text_lines = soup.find_all("div", attrs={"id": re.compile("^conv_kor")})
    print("[오늘의 영어 회화]")
    print("(영어 지문)")
    # text_lines를 슬라이싱하여 절반이후부터 끝까지 출력
    for text_line in text_lines[len(text_lines)//2:]:
        print(text_line.get_text().replace("\\n", ""))
    print("(한글 지문)")
    for text_line in text_lines[:len(text_lines)//2]:
        print(text_line.get_text().replace("\\n", ""))
    
# 코드를 직접 실행했을 때, 동작함.
if __name__ == "__main__":
    naver_weather()
    daum_headline_news()
    naver_it_news()
    hackers()
  • 오늘 날씨 : class내에 여러 class 가 있는경우 (multiple classes) select를 사용.
  • 랜덤 3개의 뉴스 : random.saple 기능을 사용하여 랜덤 3개의 뉴스를 출력.
  • IT뉴스 : 네이버 뉴스는 user-agent없이 에러가 발생하여 user-agent를 할당함.
  • 해커스 어학원 : re.compile을 사용해 id가 conv_kor로 시작하는 element 추출.

'python > python_selenium' 카테고리의 다른 글

python + selenium, bs4 환경 세팅하기  (1) 2023.11.22
selenium_quiz1  (0) 2023.04.30
Headless 크롬  (0) 2023.04.29
Selenium 활용2  (0) 2023.04.29
Selenium 활용1  (0) 2023.04.26
'python/python_selenium' 카테고리의 다른 글
  • python + selenium, bs4 환경 세팅하기
  • selenium_quiz1
  • Headless 크롬
  • Selenium 활용2
몽자비루
몽자비루
코딩공부 정리용 블로그입니다.
  • 몽자비루
    공부하는 블로그
    몽자비루
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • python (30)
        • python_selenium (16)
        • python_pygame (3)
      • appium (0)
      • 쿠버네티스 (60)
        • linux (8)
        • shell programming (8)
        • docker (18)
        • cka (23)
      • postman&API (16)
      • QA성장하기 (33)
        • 개발자에서 아키텍트로 스터디 (6)
        • 소프트웨어 공학 이해도 높이기 (6)
        • 테스팅 전문 지식 쌓기 (18)
        • 제4회 QA conference (3)
      • 에러일기 (1)
      • Server&load (35)
        • AWS (27)
        • load test (5)
        • CI CD (3)
        • Jmeter (0)
      • RAG 을 활용하여 LLM 만들어보기 (12)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    linux
    LOSTARK
    qa
    애플리케이션로그
    qa conference
    postman
    포스트맨
    사드웨어리소스
    공존성테스트
    스터디
    QAKOREA
    qa 컨퍼런스
    API
    리눅스
    도커
    k8s
    개발자에서아키텍트로
    앱공존성
    테스트 결과보고서
    python
    application log
    테스트스크립트
    e2c
    로스트아크
    쿠버네티스
    .cpu
    네트워크 테스트
    cka
    vi에디터
    로스트아크api
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
몽자비루
selenium_quiz2
상단으로

티스토리툴바