ㅁ 개요
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 소스 다운로드 및 실행
O 주요 내용
1. 소스코드를 살펴보겠습니다.
아래 부분은 이전글의 내용과 같습니다.
아래 소스에서 26~28라인의 소스를 while문 안에 두어야 새로 게시글을 다시 크롤링하므로 변경내용 감지가 가능합니다.
아래 set()함수를 사용하는 이유는 이전에 가져온 게시글과의 비교를 위해서입니다. set()함수를 사용하면 게시글 비교 후 변경된 내용만 뽑아낼 수 있습니다.
afterSet = set(afterPosts)
이전글과 비교 후 변경된 내용이 있으면 해당 변경된 내용을 뿌려주기 위해서 아래와 같이 코딩합니다.
gesi = afterSet - beforeSet
if (gesi) : <-- 무언가 변경사항이 있으면 if문 실행
ㅁ 정리
O 우리가 배운 내용
오늘은 여기까지이며, 댓글과 하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.
감사합니다.
※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.
'파이썬 프로젝트 및 응용 > 게시글 변경사항 체크 후 나에게 자동으로 알림보내기' 카테고리의 다른 글
(프로젝트)파이썬 게시글 변경사항 체크 후 나에게 자동으로 알림보내기 - 5. 변경내용을 메신저로 알림 보내기 (0) | 2023.02.02 |
---|---|
(프로젝트)파이썬 게시글 변경사항 체크 후 나에게 자동으로 알림보내기 - 4. 변경사항이 있으면 변경내용을 파일로 저장하기 (0) | 2023.02.02 |
(프로젝트)파이썬 게시글 변경사항 체크 후 나에게 자동으로 알림보내기 - 2. 게시글 크롤링하기 (0) | 2023.02.02 |
(프로젝트)파이썬 게시글 변경사항 체크 후 나에게 자동으로 알림보내기 - 1. 소개 (0) | 2023.02.02 |