본문 바로가기

Lobo's study room/[Sparta]띵동코딩

2주차.네이버 뉴스 크롤링

학습 후기: 이번주는 회사 휴가! 하지만 그냥 놀면서 보내기는 아까워서 빠르게 끝내버리기 :) 이번주는 나머지 시간동안 AI 공부에 전념할것같다. 크롤링은 기존에 네이버 웹툰, 뉴스 크롤링 등 2번정도 했었다. 그때에는 모든 코드를 암기해야 하나 하고 어렵게 봤었는데 지금 다시 보니 그냥 사용법만 익혀두면 되는거였군... :(

 

학습내용

1)지난 주 학습 내용 복습

서울에서 사는 사람 이름 출력

people = [
    {'name':'영수','city':'부산'},
    {'name':'혜지','city':'서울'},
    {'name':'소희','city':'서울'},
    {'name':'다혜','city':'부산'},
    {'name':'철수','city':'서울'}
]

for person in people:
    if person['city'] == '서울':
        print(person['name'])

2)웹스크래핑 개요

웹페이지의 동작 방식 : 서버에서 정보를 가져와 브라우저에서 보여줌

 

브라우저의 역활 : html, css, javascript의 정보를 가져와 웹페이지를 그려주는 역활

여기서 html은 웹페이지의 뼈대, css는 폰트 색상 등의 꾸미기 요소, javascript는 움직임을 주는 요소

 

3)웹스크래핑

크롤링 기본 코드

import requests
from bs4 import BeautifulSoup 

def get_news(keyword):
  headers = {'User-Agent':'Mozilla/5.0(windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
  data = requests.get(f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}',headers=headers)

  soup = BeautifulSoup(data.text, 'html.parser')

여기서 header는 실제 사람인척 하는 코드!

data = 를 통해 정보를 요청한다.

 

-라이브러리 설치하기

pip install bs4 requests

-웹스크래핑

request로 정보를 가져와서 BeautifulSoup으로 분석하기 좋게 만든다.

import requests
from bs4 import BeautifulSoup 

def get_news(keyword):
  headers = {'User-Agent':'Mozilla/5.0(windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
  data = requests.get(f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}',headers=headers)

  soup = BeautifulSoup(data.text, 'html.parser')

select_one과 select로 요소 선택 가능

a = soup.select_one('#sp_nws1 > div.news_wrap.api_ani_send > div > a')
a['href']
a.text

4)반복문 활용한 웹스크래핑

-여러 개의 기사 제목 출력

lis = soup.select('#main_pack > section > div > div.group_news > ul > li')

-a 태그 선택

a = li.select_one('a.news_tit')

-반복문 사용하여 li 출력

lis = soup.select('#main_pack > section > div > div.group_news > ul > li')

  for li in lis:
    a = li.select_one('a.news_tit')
    print(a.text, a['href'])

5)웹스크래핑 함수 만들기

-키워드만 바꿔 뉴스 크롤링

def get_news(keyword):
  headers = {'User-Agent':'Mozilla/5.0(windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
  data = requests.get(f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}',headers=headers)

  soup = BeautifulSoup(data.text, 'html.parser')
  lis = soup.select('#main_pack > section > div > div.group_news > ul > li')

  for li in lis:
    a = li.select_one('a.news_tit')
    print(a.text, a['href'])
get_news('삼성전자')

6)신문사명 함께 출력해서 크롤링 하기

import requests
from bs4 import BeautifulSoup 

def get_news(keyword):
  headers = {'User-Agent':'Mozilla/5.0(windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
  data = requests.get(f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}',headers=headers)

  soup = BeautifulSoup(data.text, 'html.parser')
  lis = soup.select('#main_pack > section > div > div.group_news > ul > li')

  for li in lis:
    a = li.select_one('a.news_tit')
    media = li.select_one('a.info.press')
    print(a.text, a['href'], media.text.replace('언론사 선정',''))