편집 기록

편집 기록
  • 프로필 ᅟᅟᅟᅟ님의 편집
    날짜2021.12.21

    파이썬 크롤링 고수님들 도움 좀 부탁 드립니다. 네이버 뉴스 키워드 크롤링 텔레그램봇


    키워드를 사용해서 네이버 뉴스 크롤링을 사용하여 텔레그램 봇으로 보내려고 합니다.

    코딩 완전 초보인데 유튜브랑 구글링해서 아래와같이 코드를 파이썬이랑 비주얼 스튜디오 코드를 활용해서 다음과 같이 짰습니다

    #### 라이브러리 불러오기
    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> 
    

    고수님들 도움좀 부탁 드립니다.

  • 프로필 신광일님의 편집
    날짜2021.12.21

    파이썬 크롤링 고수님들 도움 좀 부탁 드립니다. 네이버 뉴스 키워드 크롤링 텔레그램봇


    키워드를 사용해서 네이버 뉴스 크롤링을 사용하여 텔레그램 봇으로 보내려고 합니다.

    코딩 완전 초보인데 유튜브랑 구글링해서 아래와같이 코드를 파이썬이랑 비주얼 스튜디오 코드를 활용해서 다음과 같이 짰습니다

    라이브러리 불러오기

    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 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>

    고수님들 도움좀 부탁 드립니다.