작성
·
111
·
수정됨
0
안녕하세요.
아래와 같은 코드를 사용하여 날짜 범위를 지정해서 뉴스 기사 크롤링을 해왔습니다.
어제까지만 해도 잘 됬었는데, 날짜 범위를 변경해도 전혀 작동하지 않고, 범위를 어떻게 설정하던 상관없이 (임의로) 오늘자 뉴스만 계속 크롤링 됩니다 ㅠㅠ...
문제가 있어서인지.. 원래 크롤링이 완료되면 startcoding 폴더안에 엑셀파일이 자동으로 저장되었는데, 파일도 나타나지를 않습니다 ㅠㅠ.
어떤게 문제인지 도움을 부탁드립니다.
import requests
from bs4 import BeautifulSoup
import time
import pyautogui
from openpyxl import Workbook
from openpyxl.styles import Alignment
# 사용자입력
keyword = pyautogui.prompt("검색어를 입력하세요")
lastpage = int(pyautogui.prompt("몇 페이지까지 크롤링 할까요?"))
# 엑셀 생성하기
wb = Workbook()
# 엑셀 시트 생성하기
ws = wb.create_sheet(keyword)
# 열 너비 조절
ws.column_dimensions['A'].width = 60
ws.column_dimensions['B'].width = 60
ws.column_dimensions['C'].width = 120
# 행 번호
row = 1
# 페이지 번호
page_num = 1
for i in range(1, lastpage * 10, 10):
print(f"{page_num}페이지 크롤링 중 입니다.==========================")
response = requests.get(f"https://search.naver.com/search.naver?sm=tab_hty.top&where=news&query={keyword}&start={i}&ds=2024.6.3&de=2024.6.9")
html = response.text # html은 response의 text 안에 위치함
soup = BeautifulSoup(html, 'html.parser')
articles = soup.select("div.info_group") #뉴스 기사 div 10개 추출
# 기사가 10개니까 for문을 써서 하나하나 추출 필요
for article in articles:
links = article.select("a.info") # a 태그, info class인 아이들을 가져옴. = 리스트
if len(links) >= 2: # 링크가 2개 이상이면
url = links[1].attrs['href'] # 두번째 링크의 href를 추출
# 다시 request 날려주기
response = requests.get(url, headers={'User-agent': 'Mozila/5.0'})
html = response.text
soup = BeautifulSoup(html, 'html.parser')
print(url)
# 연예 뉴스 체크
if "entertain" in response.url:
title = soup.select_one(".end_tit")
content = soup.select_one("#articeBody")
elif "sports" in response.url:
title = soup.select_one("h4.title")
content = soup.select_one("#newsEndContents")
date = soup.select_one("div.article_info > span > em")
# 본문 내용 안에 불필요한 div, p 삭제
divs = content.select("div")
for div in divs:
div.decompose()
paragraphs = content.select("p")
for p in paragraphs:
p.decompose()
else:
title = soup.select_one(".media_end_head_headline")
content = soup.select_one("#newsct_article")
date = soup.select_one("span.media_end_head_info_datestamp_time._ARTICLE_DATE_TIME")
# Add the check here
if date is not None:
date_text = date.text.strip()
else:
date_text = "Date not found"
print("=======링크======= \n", url)
print("=======제목======= \n", title.text.strip())
print("=======본문======= \n", content.text.strip())
print("=======날짜======= \n", date)
ws[f'A{row}'] = url # A열에는 URL 기입
ws[f'B{row}'] = title.text.strip()
ws[f'C{row}'] = content.text.strip()
ws[f'D{row}'] = date_text
# 자동 줄바꿈
ws[f'C{row}'].alignment = Alignment(wrap_text=True)
row = row + 1
time.sleep(0.3)
page_num = page_num + 1
wb.save(f'{keyword}_result.xlsx')