본문 바로가기

개발일지_파이썬for금융인

실전 - 뉴스 크롤링하기_다수의 검색어

'삼성전자'라는 특정 검색어가 아니라, 여러 검색어로 뉴스를 수집하고 싶다?

정해진 동작을 하게 하는 것 = 함수를 넣는다.

def를 넣어서 크롤링기본코드를 편집하는 것이다.

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('https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query=삼성전자',headers=headers)

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

def 정의한다

get_news를

keyword를 받아서:

받아오는 내용에 기본코드 나머지 아랫부분과 반복문 등을 넣는다.(들여쓰기로 def아래로 넣어줌)

 

받아오는 데이터가 '삼성전자'가 아니고 키워드가 들어가야 한다.

링크?앞에 f를 붙여주고, 삼성전자 자리에 중괄호로 감싼 keyword를 넣는다.

data = requests.get(f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}',headers=headers)

아래는 완성코드.

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:
    smth= li.select_one('a.news_tit')
    print(smth.text, smth['href'])

get_news('현대자동차')

정의한 get_news('키워드')를 출력하면

이런 식으로 뜬다.

 

두 개 넣으면 두 개 다 뜸.