# 네이버 기사 크롤링
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 |
댓글