티스토리 뷰

728x90

「오늘은 네이버 코로나 현황을 크롤링해서 IFTTT를 통해 해당 내용을 메시지로 보내보는 것을 해보겠습니다.」


과정:

  • 네이버의 코로나 현황 크롤링해 데이터 분류하기
  • ITFFF사이트의 서비스 사용하기
  • 위의 두 과정을 연결시키기

1. 네이버의 코로나 현황 크롤링해 데이터 분류하기

네이버에 코로나 현황이라고 검색하면 나오는 페이지 입니다. 하루달리 늘어나는 확진환자 수를 보니 빨리 이 사태가 종결되었으면 좋겠군요..

자 이제 크롤링을 해봅시다!

F12를 눌러 확인해보면  <div class="state_graph"> 밑에

먼저 크롤링 코드는 아래와 같습니다.

import requests
from bs4 import BeautifulSoup
from datetime import datetime
 
day_month = datetime.today().month    
day_day = datetime.today().day        
 
data = []
CoronaData = []
datasets = []
url='https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=%EC%BD%94%EB%A1%9C%EB%82%98+%ED%98%84%ED%99%A9' 
hdr = {'Accept-Language': 'ko_KR,en;q=0.8', 'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36')}
req = requests.get(url, headers=hdr)
html = req.text
soup = BeautifulSoup(html, 'html.parser')
for i in soup.select('div[class=status_info]'):
    data.append(i.text)
CoronaData = str(data).split(" ")

patient = CoronaData[4]   #총 확진자
Check = CoronaData[9]     #검사중
Release = CoronaData[14]  #격리해제
dead = CoronaData[19]     #사망자
print(patient,Check,Release,dead)
  
url1 = "https://maker.ifttt.com/trigger/Corona_Check/with/key/여러분의 url"
r = requests.post(url1, data={"value1": "총 확진자:" + patient, "value2": "총 사망자:" + dead, "value3": "날짜 : " +str(day_month)+"월 " + str(day_day) + "일"})
 

#위 코드의 3,5,6번 줄은 datatime으로 현재의 날짜를 받아오는 역할입니다.

출력 결과입니다.

각각 확진환자수, 격리해제수,검사진행수,사망자수,월,일 입니다.


2.ITFFF사이트의 서비스 사용하기

 

 

 

 

빨간색 네모 -> 주황색 네모 순서로 클릭해주세요

 

요 이미지를 클릭해주세요!

그다음 나오는 파란색 네모(Receive a Web request)를 클릭하면 

요런 창이 나오는데, 말 그대로 이벤트 이름입니다. 아무렇게나 정해주세요, 저는 Corona_Check라고 입력했습니다.

Create trigger을 누르니 이렇게 This자리에 webhooks의 아이콘이들어간 것을 확인할 수 있습니다.

다음 That을 클릭한 다음 메시지를 보내야 하니 Android SMS를 클릭해 주세요.

클릭한 후에 send an SMS라는 초록색 네모를 클릭해 주세요.

클릭하면 

요런 창이 뜨는 것을 확인하실 수 있습니다.

Phone Number에는 말 그대로 메시지를 전송할 대상의 핸드폰 번호를 입력해 주시면 됩니다.                                     ex) 전화번호가 010-1234-567 이면  82101234567을 입력해주셔야 합니다.(한국 기준)

Message에는 받을 메시지의 형식을 입력해 줘야 하는데, 총 확진환자수, 사망자수, 날짜를 메시지로 보낼 것이므로,        Message를 모두 지우고 Add ingredient에서 value1, value2, value3을 추가해 줍니다.

이런식으로 되면 완성입니다!

그다음 Create action을 클릭한 후에 Finish까지 누르면 비로소 완성입니다!


3. 위의 두 과정을 연결시키기

https://ifttt.com/maker_webhooks를 접속합니다.

접속하면 이런 형태의 창이 뜹니다.

우측 상단의 Documentation을 클릭합니다.

아까 설정한 Event Name을 사진의 "아까 설정한 Event Name"와 같은 위치인 창에 입력하고 Value1, Value2, Value 3에는 원하는 텍스트를 입력해보세요.

위 작업이 모두 끝나면 아래의 Test it(파란색 버튼)을 클릭해 보세요! 문자가 해당 전화번호로 전송된 것을 확인하실 수 있습니다. 


3 - 2. 코드 작업

1번에서 작성한 코드와 애플릿을 활용하는 코드를 합쳐봅시다!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import requests
import requests
from bs4 import BeautifulSoup
from datetime import datetime
 
day_month = datetime.today().month    
day_day = datetime.today().day        
 
data = []
url='https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=%EC%BD%94%EB%A1%9C%EB%82%98+%ED%98%84%ED%99%A9' 
hdr = {'Accept-Language''ko_KR,en;q=0.8''User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36')}
req = requests.get(url, headers=hdr)
html = req.text
soup = BeautifulSoup(html, 'html.parser')
for i in soup.select('div[class=state_graph]'):
    data.append(i.text)
datasets = data[0]
datasets = datasets.split("    ",10)
datasets = datasets[1:]
datasets = datasets[:-1]
for i in range(0,4):
    datasets[i] = datasets[i].replace(" ","")
    
datasets.append(day_month)
datasets.append(day_day)
print(datasets)
patient = datasets[0]
dead = datasets[3]
dayday = datasets[5]
month = datasets[4]
 
 
url1 = "https://maker.ifttt.com/trigger/Corona_Check/with/key/여러분의url"
= requests.post(url1, data={"value1": patient, "value2": dead, "value3""날짜 : " +str(month)+"월 " + str(dayday) + "일"})
 
cs

 *위 코드의 url1은 아래 사진의 마지막 https:// ~~7 부분으로 바꿔주셔야 합니다!*


실행결과:

코드 실행 결과입니다.

하루가 다르게 느는 환자수를 보니 마음이 아프네요 ㅠ

하루빨리 이 사태가 종결되었으면 좋겠습니다.


 

※해당 사이트의 robots.txt를 찾아보면

User-agent: * Disallow: /search

이므로 이 포스팅은 공부 참고용으로만 사용해주시기를 권장합니다! ※

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함