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

(프로젝트)파이썬 게시글 변경사항 체크 후 나에게 자동으로 알림보내기 - 2. 게시글 크롤링하기

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

ㅁ 개요

 

O 프로그램 소개

 

 

 - 이번 글은 이전글(파이썬 게시글 변경사항 체크 후 나에게 자동으로 알림보내기 - 1. 소개)에 이은 2번째 글로 내가 원하는 사이트의 게시글을 파이썬의 크롤링으로 가져오는 방법에 대하여 알아보겠습니다.

 

 

 

 

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

 

 

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

 

 

(1) 우리가 원하는 것은 아래 블로그에서 새로운 게시글이 올라왔는지, 또는 게시글이 변경되었는지를 알고 싶고, 새로운 게시글이 올라오거나, 게시글이 변경되면 나에게 자동으로 알림을 보내주는 것입니다.

 

먼저 이번글에서는 게시글을 크롤링하여 가져와 볼것이며, 아래의 경우 제목(10개)만 가져와 보겠습니다.

https://pagichacha.tistory.com

 

 

 (2) 프로그램을 실행하면 아래와 같이 위의 게시글 제목 10개를 가져와서 뿌려줍니다.

 

 

 


 

ㅁ 세부 내용

 

O 완성된 소스

 

 

소스 : 1.py( 게시글 크롤링)

# -*- coding utf-8 -*-
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(set(beforePosts))
beforeSet = set(beforePosts)
print(beforeSet)

 

 

 

 

 

O 소스 다운로드 및 실행

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

 

 


 
 

O 주요 내용

 

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

https://pagichacha.tistory.com/

 

 

 

2.해당 게시글 맨 위의 상단의 '제목 우클릭 > 검사' 를 클릭하면 오른쪽 화면에 창이 하나 열리면서 음영으로 표시되는데, 이부분이 왼쪽에서 마우스로 우클릭한 소스부분입니다.

 

 

3. 다시 오른쪽 소스 부분에서 '선택된 음영 우클릭 > Copy > Copy selector' 클릭 후

 

 

 4. 아래와 같이 메모장 등에 붙여넣어 봅니다.

 

 

 5. 우리는 이제 가져오고 싶은 게시글(게시글의 제목 10개)의 태그 위치를 알았으므로 이를 소스코드에 적용해 보겠습니다.(라인 넘버별로 설명)

 

lline 2~3: 관련 모듈 임포트

line 5 : 가져오려는 사이트를 url변수에 담습니다.

line 6 : requests객체의 get()함수로 url을 요청합니다.

line 7 : BeautifulSoup객체로 가져온 html을 이쁘게 가공합니다.

line 9 : 가져올 게시글 제목이 10개이므로 이를 담아둘 리스트를 만들어 둡니다.(beforePosts = [])

line 11 : 위의 메모장에 붙여둔 태크를 자세히 보면 'article:nth-child(3)' <-- 3부터 시작함을 알 수 있습니다.

게시글의 위에서 2번째 글을 위와 같은 방법으로 가져와서 메모장에 붙여보면 4로 되어있음을 알 수 있습니다.

따라서 우리는 게시글 제목 10개를 가져올 것이므로 for문으로 3부터 13까지 가져와야 10개을 가져올 수 있습니다.

line 12 : soup객체의 select_one()함수로 게시글의 제목을 '.text'로 가져와서 beforePost변수에 담습니다.

line 14 :그리고 위의 beforePost변수에 담아둔 게시글 제목을 beforePosts리스트에 append()함수로 붙여줍니다.

line 16 : set()함수는 순서와 상관없이 묶어 주는 함수인데, 뒤에서 사용할 예정입니다.

 

 

 

 6. 이제 프로그램을 실행하면 아래와 같이 게시글의 제목 10개를 잘 가져오는 것을 볼 수 있습니다.

 

 

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 오늘 우리는 내가 원하는 사이트에 새로운 게시글이 올라왔는지, 또는 게시글이 변경되었는지를 알기 위해서 우선 게시글을 파이썬의 크롤링으로 가져오는 방법에 대하여 알아보았습니다.
 
 
 
 - 오늘 우리가 배운 내용을 한줄로 정리해 보면 아래와 같습니다.
 
 
 > 1.'Copy selector'로 가져온 태그를 뷰리풀수프로 아래와 같이 soup.select_one()함수에 넣어 줍니다.
beforePost = soup.select_one('#container > main > div > div.area-common > article:nth-child('+str(i)+') > div > a > strong').text
 

 

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

 

 

감사합니다.

 

 

 

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

 

728x90
반응형
LIST