Python으로 스크래핑한 정보를 LINE Notify를 사용하여 알림
11432 단어 파이썬scrapingBeautifulSoupLineNotify
개요
스크래핑에 대해 조금 공부했기 때문에 그것을 이용한 간단한 앱을 작성했을 때의 메모입니다.
이번은 예로서 Yahoo! 날씨로부터 얻은 정보를 LINE에 통지하는 방법입니다.
절차
스크래핑 준비
이번에는 BeautifulSoup을 사용했습니다. 스크레이핑의 기사는 당 사이트내에서도 다수 있으므로 그쪽을 참고해 주시면 좋겠습니다.
일기 예보 취득
import requests
from bs4 import BeautifulSoup
r = requests.get('https://example.html')
soup = BeautifulSoup(r.content, "html.parser")
hoge = soup.find_all("p")
date = soup.find_all("p", class_ = "date")
쉽게 특정 태그에 대한 정보를 얻을 수 있습니다. 이번에는 예로 P 태그를 얻고 있습니다.
또 3행째와 같이 속성등을 한층 더 짜내는 것으로 취득하는 정보를 지정하기 쉬워집니다.
취득한 정보는 list로서 취급할 수 있고, 아래와 같이 하는 것으로 문자를 취득하는 것도 가능합니다.
today = date.getTest()
날짜와 같은 요령으로 날씨 정보도 취득 가능합니다.
LINE Notify를 이용하여 획득한 메시지 알림
LINE Notify 의 이용 방법에 대해서는 이쪽의 기사 [초간단] LINE notify 사용해보기 를 참고로 했습니다.
이하, python을 이용한 LINE의 통지 방법입니다.
LINE_TOKEN = "取得したトークンを記述する"
LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify"
def send_weather_info(msg):
method = "POST"
headers = {"Authorization": "Bearer %s" % LINE_TOKEN}
payload = {"message": msg}
try:
payload = urllib.parse.urlencode(payload).encode("utf-8")
req = urllib.request.Request(
url=LINE_NOTIFY_URL, data=payload, method=method, headers=headers)
urllib.request.urlopen(req)
except Exception as e:
print ("Exception Error: ", e)
sys.exit(1)
최종 코드
r = requests.get('https://example.html')
soup = BeautifulSoup(r.content, "html.parser")
w_date = soup.find_all("x", class_ = "xxxx")
weather = soup.find_all("x", class_ = "xxxx") # "x", "xxxx"はサイトに合わせて適宜変更してください。
today = w_date[0].getText()
tomorrow = w_date[1].getText()
td_weather = weather[0].getText()
tm_weather = weather[1].getText()
msg = "天気予報\n%s : %s\n%s : %s" % (today, td_weather, tomorrow, tm_weather)
LINE_TOKEN = "取得したトークンを記述する"
LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify"
def send_weather_information(msg):
method = "POST"
headers = {"Authorization": "Bearer %s" % LINE_TOKEN}
payload = {"message": msg}
try:
payload = urllib.parse.urlencode(payload).encode("utf-8")
req = urllib.request.Request(
url=LINE_NOTIFY_URL, data=payload, method=method, headers=headers)
urllib.request.urlopen(req)
except Exception as e:
print ("Exception Error: ", e)
sys.exit(1)
def main():
send_weather_information(msg)
if __name__ == '__main__':
main()
이런 식으로 LINE에 알림이 왔습니다.
감상
날씨 등 조사하는 것이 번거롭다고 생각해 작성해 보았습니다.
하지만 파일을 실행하는 것도 번거롭기 때문에 AmazonDashButton 등을 이용하여 더욱 쉽게 할 수 있다고 생각합니다.
날씨만이라면 LINE의 통지로서 더 좋은 방법이 있는 것 같기 때문에 그쪽도 참고로 다시 공부하고 싶습니다.
Reference
이 문제에 관하여(Python으로 스크래핑한 정보를 LINE Notify를 사용하여 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tuna27/items/8a28db55d7c1165ee0dc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
r = requests.get('https://example.html')
soup = BeautifulSoup(r.content, "html.parser")
w_date = soup.find_all("x", class_ = "xxxx")
weather = soup.find_all("x", class_ = "xxxx") # "x", "xxxx"はサイトに合わせて適宜変更してください。
today = w_date[0].getText()
tomorrow = w_date[1].getText()
td_weather = weather[0].getText()
tm_weather = weather[1].getText()
msg = "天気予報\n%s : %s\n%s : %s" % (today, td_weather, tomorrow, tm_weather)
LINE_TOKEN = "取得したトークンを記述する"
LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify"
def send_weather_information(msg):
method = "POST"
headers = {"Authorization": "Bearer %s" % LINE_TOKEN}
payload = {"message": msg}
try:
payload = urllib.parse.urlencode(payload).encode("utf-8")
req = urllib.request.Request(
url=LINE_NOTIFY_URL, data=payload, method=method, headers=headers)
urllib.request.urlopen(req)
except Exception as e:
print ("Exception Error: ", e)
sys.exit(1)
def main():
send_weather_information(msg)
if __name__ == '__main__':
main()
날씨 등 조사하는 것이 번거롭다고 생각해 작성해 보았습니다.
하지만 파일을 실행하는 것도 번거롭기 때문에 AmazonDashButton 등을 이용하여 더욱 쉽게 할 수 있다고 생각합니다.
날씨만이라면 LINE의 통지로서 더 좋은 방법이 있는 것 같기 때문에 그쪽도 참고로 다시 공부하고 싶습니다.
Reference
이 문제에 관하여(Python으로 스크래핑한 정보를 LINE Notify를 사용하여 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tuna27/items/8a28db55d7c1165ee0dc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)