파이썬 프로젝트 및 응용/게시글 변경사항 체크 후 나에게 자동으로 알림보내기

(프로젝트)파이썬 게시글 변경사항 체크 후 나에게 자동으로 알림보내기 - 3. 이전에 크롤링한 게시글과 현재 게시글 비교하기

파기차차 2023. 2. 2. 07:58
728x90
반응형
SMALL
728x90
반응형

ㅁ 개요

 

O 프로그램 소개

 

 

 - 이번 글은 이전글(파이썬 게시글 변경사항 체크 후 나에게 자동으로 알림보내기 - 2. 게시글 크롤링하기)에 이은 3번째 글로 이전글에서 가져온 게시글과 현재 게시글을 가져와서 변경사항이 존재하는지 비교하는 방법에 대하여 알아보겠습니다.

 

 

 

 

O 완성된 프로그램 실행 화면

 

 

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

1. 크롤링하고 싶은 사이트에 접속합니다.

https://pagichacha.tistory.com/

 

 

 

 2. 처음에는 사이트에 변경사항이 없으므로 프로그램 실행 시 아래와 같이 '게시글에 변동사항이 없습니다.'라고 뜹니다.

 

 

 

 

3. 맨위의 게시글 제목에 아래와 같이 '1'을 제목 앞에 붙여 변경해 보겠습니다.

 

 

 

 

 

4.프로그램 실행 시 아래와 같이 프로그램이 변경된 내용을 감지하고 '게시글에 변동사항이 있습니다.' 라고 메시지를 보여주고 있습니다.

 

 

 

 


 

ㅁ 세부 내용

 

O 완성된 소스

 

 

소스 : 2.py(게시글 변경사항 체크)

# -*- coding utf-8 -*-
import time
from bs4 import BeautifulSoup
import requests

url = "https://pagichacha.tistory.com"
html = requests.get(url)
soup = BeautifulSoup(html.content, "html.parser")

beforePosts = []

for i in range(3,13):
    beforePost = soup.select_one('#container > main > div > div.area-common > article:nth-child('+str(i)+') > div > a > strong').text
    print(beforePost)
    beforePosts.append(beforePost)

print("++++++++++++++++++++++++++++++++++++++++")

beforeSet = set(beforePosts)
# print(beforeSet,"+++++++++++++++++++++++ beforeSet")

time.sleep(3)

#######################################################################################################

while True:
    url = "https://pagichacha.tistory.com"
    html = requests.get(url)
    soup = BeautifulSoup(html.content, "html.parser")

    afterPosts = []

    for i in range(3,13):
        afterPost = soup.select_one('#container > main > div > div.area-common > article:nth-child('+str(i)+') > div > a > strong').text
        print(afterPost)
        afterPosts.append(afterPost)

    print("++++++++++++++++++++++++++++++++++++++++")
    afterSet = set(afterPosts)
    # print(afterSet,"+++++++++++++++++ afterSet")
    #######################################################################################################

    gesi = afterSet - beforeSet
    # print(gesi,"+++++++++++++++++ gesi")
    if (gesi):
        print("=======================================================================================")
        print("게시글에 변동사항이 있습니다. 아래 게시글이 변경된 것으로 보입니다.")
        print(gesi,"+++++++++++ 2") 
        print("=======================================================================================")
    else:
        print("게시글에 변동사항이 없습니다.")
    #######################################################################################################

    beforeSet = afterSet 

    time.sleep(5)

 

 

 

 

O 소스 다운로드 및 실행

 
 - 소스파일 다운로드 후 cmd, 파워쉘 또는 vscode 등에서 아래와 같이 실행하시기 바랍니다.
 
 > python 2.py

 

 


 
 

O 주요 내용


 

1. 소스코드를 살펴보겠습니다.

아래 부분은 이전글의 내용과 같습니다.

 

 

 

 아래 소스에서 26~28라인의 소스를 while문 안에 두어야 새로 게시글을 다시 크롤링하므로 변경내용 감지가 가능합니다.

 

아래 set()함수를 사용하는 이유는 이전에 가져온 게시글과의 비교를 위해서입니다. set()함수를 사용하면 게시글 비교 후 변경된 내용만 뽑아낼 수 있습니다.

afterSet = set(afterPosts)

 

이전글과 비교 후 변경된 내용이 있으면 해당 변경된 내용을 뿌려주기 위해서 아래와 같이 코딩합니다.

gesi = afterSet - beforeSet

if (gesi) : <-- 무언가 변경사항이 있으면 if문 실행

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 오늘 우리는 이전글에서 가져온 게시글과 현재 게시글을 가져와서 변경사항이 존재하는지 비교하는 방법에 대하여 알아보았습니다.
 
 
 
 - 오늘 우리가 배운 내용 중 가장 중요한 부분을 꼽으라면 아래와 같습니다.
 
 
 > 1.이전글과 현재글의 변경사항을 알아내기 위해 우리는 set()함수를 사용하여 아래와 같이 비교하였습니다.
gesi = afterSet - beforeSet
 
 > 2. 그리고 while루프 안에서 끝부분에 현재글은 새로운 글을 가져오면 다시 이전글로 되어야 하므로 아래와 같이 현재글을 이전글로 바꿔주었습니다.
beforeSet = afterSet

 

오늘은 여기까지이며, 댓글하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.

 

 

감사합니다.

 

 

 

※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.

 

728x90
반응형
LIST