파이썬 크롤링 고수님들 도움 좀 부탁 드립니다. 네이버 뉴스 키워드 크롤링 텔레그램봇
조회수 536회
키워드를 사용해서 네이버 뉴스 크롤링을 사용하여 텔레그램 봇으로 보내려고 합니다.
코딩 완전 초보인데 유튜브랑 구글링해서 아래와같이 코드를 파이썬이랑 비주얼 스튜디오 코드를 활용해서 다음과 같이 짰습니다
#### 라이브러리 불러오기
import requests
from bs4 import BeautifulSoup
import telegram
from apscheduler.schedulers.blocking import BlockingScheduler
####검색 키워드
search_word = '폐기물 매립장'
####텔레그램 봇 생성
token = '2144842764:AAEB_1dpdpCxeUnX2rY0PnFMqrt2O6H5c0A'
bot = telegram.Bot(token=token)
####스케줄러 생성
sched = BlockingScheduler()
####기존에 보냈던 링크를 담아둘 리스트
old_links=[]
####링크 추출 함수
def extract_links(old_links=[]):
url = f'https://m.search.naver.com/search.naver?sm=mtp_hty.top&where=m&query={search_word}'
req = requests.get(url)
html = req.text
soup = BeautifulSoup(html, 'html.parser')
search_result = soup.select_one('#news_result_list')
news_list = search_result.select('.bx >.news_wrap >a')
links = []
for news in news_list[:5]:
link = news['href']
links.append(link)
new_links=[]
for link in links:
if link not in old_links:
new_links.append(link)
print(new_links)
return new_links
####텔레그램 메시지 전송 함수
def send_links():
global old_links
new_links = extract_links(old_links)
if new_links:
for link in new_links:
bot.sendMessage(chat_id='879999105', text = link)
else:
bot.sendMessage(chat_id='879999105', text='새로운 뉴스 없음')
old_links += new_links.copy()
old_links = list(set(old_links))
####최초 시작
send_links()
####스케줄러 세팅 및 작동
sched.add_job(send_links, 'interval', seconds=30)
sched.start()
===에러 메세지 ======
PS C:\Users\110121\Documents\projects> & C:/Users/110121/AppData/Local/Programs/Python/Python310/python.exe c:/Users/110121/Documents/projects/waste_landfill.py
Traceback (most recent call last):
File "c:\Users\110121\Documents\projects\waste_landfill.py", line 54, in <module>
send_links()
File "c:\Users\110121\Documents\projects\waste_landfill.py", line 44, in send_links
new_links = extract_links(old_links)
File "c:\Users\110121\Documents\projects\waste_landfill.py", line 26, in extract_links
news_list = search_result.select('.bx >.news_wrap >a')
AttributeError: 'NoneType' object has no attribute 'select'
PS C:\Users\110121\Documents\projects>
고수님들 도움좀 부탁 드립니다.
1 답변
-
궁금한게 2개 있는데요.
- 네이버에서는 뉴스 관련 api를 제공하는데 굳이 이렇게 하시는 이유는 무엇인가요?
- 뉴스 크롤링이 목적인데, 굳이 뉴스 검색 결과가 아닌 통합 검색 결과를 가져오는 이유는 무엇 때문인가요?
다음으로 수정 #search_result = soup.select_one('#news_result_list') news_list = soup.select('.bx >.news_wrap >a')
댓글 입력