본문 바로가기
Programing/Toy Project

네이버 기사 키워드 크롤링 + 액셀 저장

by yooom 2023. 2. 5.
# 네이버 기사 크롤링
import requests
from bs4 import BeautifulSoup
import datetime
from datetime import timedelta
import pandas as pd
import openpyxl

keyword = ['노르웨이수산물위원회','후쿠시마 원전','노르웨이 수산물','노르웨이 연어','노르웨이 고등어','관세']
day = datetime.date.today()
today = datetime.date.today().strftime("%Y.%m.%d")
yesterday = (day - timedelta(days=1)).strftime("%Y.%m.%d")
news=[]
data=[]
isLastpage = 'false'

for i in range(0,len(keyword),1):
    for j in range(1,30,10):
        response = requests.get(f'https://search.naver.com/search.naver?where=news&sm=tab_pge&query={keyword[i]}&sort=1&photo=0&field=0&pd=4&ds='+yesterday+'.13.26&de='+today+f'.13.26&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:dd,p:1d,a:all&start={j}')
        html = response.text
        soup = BeautifulSoup(html, 'html.parser')
        try:
            ul = soup.find('ul',{'class':'list_news'}).findAll('li')   #ul에 있는 li태그 저장          
            for li in ul:
                data = li.find('a',{'class':'news_tit'})   #li태그의 데이터 불러오기
                news.append({
                            'keyword' : keyword[i],
                            'press' : li.find('a',{'class':'info press'}).text,  #발행사는 a태그에서 따로 검색
                            'title' : data.text,
                            'url' : data.get('href'),
                            'date': day.strftime('%b %d %Y')                            
                            })       

                isLastpage = soup.select_one('.btn_next').attrs['aria-disabled']   #마지막 페이지는 화살표버튼 활성화로 판단

                if isLastpage == 'true':
                    break
    
        except AttributeError:
            break

df = pd.DataFrame(news,columns=['keyword','press','title','url','date'])
df.set_index('keyword')

df.to_excel(day.strftime("%d %B %Y")+' 기사 크롤링.xlsx')
wb = openpyxl.load_workbook(day.strftime("%d %B %Y")+' 기사 크롤링.xlsx')
ws = wb.active
ws.column_dimensions['B'].width = 15
ws.column_dimensions['C'].width = 22
ws.column_dimensions['D'].width = 68
wb.save(day.strftime("%d %B %Y")+' 기사 크롤링.xlsx')

print('완료')
728x90

'Programing > Toy Project' 카테고리의 다른 글

Outlook 메일 전송 Python  (0) 2023.06.05
엑셀 파일 요약  (0) 2023.06.02
당일 구글 기사 크롤링 with Python  (0) 2023.02.06

댓글