Python3+BeautifulSoup4+Cloud Functions로 1시간에 만드는 표고버섯

소개



표고 버섯 운세 사이트를 아십니까?
h tps://ゔぉ구에기 rl. jp / 호로 s 코페 / 표고 버섯 /

폐사에서는, 잘 맞으면 사장을 필두로 공전의 큰 붐을 일으키고 있습니다.
매주 월요일에 갱신되어 LINE도 있지만, 모두가 보는 Slack에 흘러 오면 기뻐요! 라고 혼자 시작하면 의외로 간단하고 1시간에 할 수 있었다는 이야기.

만든 것



표고 버섯의 갱신 일시인 월요일 12시에 Slack에 스크래핑 한 각 별자리의 점의 결과를 흘리는 것만!
표고 버섯 봇의 GitHub

환경


  • Google Cloud Functions
  • Google Cloud Scheduler
  • Google Cloud Pub/Sub
  • Python 3.7
  • BeautifulSoup4 4.8.1
  • slackweb 1.0.5



  • 이런 느낌이 듭니다.
    이름은 기본 「siitake」로 통일해 갑니다.

    Cloud Scheduler 등록





    표고 버섯의 갱신 빈도에 맞추어 매주 월요일의 12시부터로 설정합니다.
    이 후 Pub/Sub를 부르므로 타겟은 Pub/Sub, 주제는 "siitake"로 둡니다.

    Cloud Pub/Sub 등록





    이 주제 만들기 버튼을 눌러 Scheduler와 일치하도록 "siitake"라는 주제 ID로 만듭니다.

    Cloud Functions 만들기





    위와 같이 트리거를 Cloud Pub/Sub, 주제를 방금 등록한 'siitake'로 작성합니다.

    main.py 만들기



    미리 slackwebbs4를 설치하십시오.
    $ pip install bs4 slackweb
    

    흐름

    1. 12 별자리의 영어 목록을 준비한다
    constellations = [
            "aries",
            "taurus",
            "gemini",
            "cancer",
            "leo",
            "virgo",
            "libra",
            "scorpio",
            "sagittarius",
            "capricorn",
            "aquarius",
            "pisces"
        ]
    
        constellations_kana = [
            "【おひつじ座】",
            "【おうし座】",
            "【ふたご座】",
            "【かに座】",
            "【しし座】",
            "【おとめ座】",
            "【てんびん座】",
            "【さそり座】",
            "【いて座】",
            "【やぎ座】",
            "【みずがめ座】",
            "【うお座】"
        ]
    

    2. 오늘의 날짜를 취득. 별자리 목록을 루프로 돌리면서 기본 URL에 각 별자리, 날짜를 맞추고 bs4 에서 매번 HTML 얻기
        base_url = "https://voguegirl.jp/horoscope/shiitake/"
        date = dt.date.today()
        slack = slackweb.Slack(url=os.environ["SLACK_URL"])
    
        for c, c_kana in zip(constellations, constellations_kana):
            url = base_url + c + "/" + date.strftime("%Y%m%d") + "/"
    

    3. bs4로 매번 HTML을 취득하고 싶은 부분에 맞는다 class="a-text" 부분을 얻는다
    for c, c_kana in zip(constellations, constellations_kana):
            url = base_url + c + "/" + date.strftime("%Y%m%d") + "/"
            res = requests.get(url)
            soup = BeautifulSoup(res.text)
            res.close()
            base_txt = soup.find("div", class_="a-text").text
    

    4. Slack에 보내는 메시지에 맞게 텍스트를 맞추고 송신!
        for c, c_kana in zip(constellations, constellations_kana):
            url = base_url + c + "/" + date.strftime("%Y%m%d") + "/"
            res = requests.get(url)
            soup = BeautifulSoup(res.text)
            res.close()
            base_txt = soup.find("div", class_="a-text").text
            txt = c_kana + "\n\n" + base_txt.strip() + "\n\n続きはこちら⇒ " + url
            slack.notify(text=txt)
    

    구현



    모든 코드는 아래에 생략
    
    import requests
    import datetime as dt
    import os
    import slackweb
    from bs4 import BeautifulSoup
    
    def siitake(a, b):
        constellations = [
            "aries",
            "taurus",
            "gemini",
            "cancer",
            "leo",
            "virgo",
            "libra",
            "scorpio",
            "sagittarius",
            "capricorn",
            "aquarius",
            "pisces"
        ]
    
        constellations_kana = [
            "【おひつじ座】",
            "【おうし座】",
            "【ふたご座】",
            "【かに座】",
            "【しし座】",
            "【おとめ座】",
            "【てんびん座】",
            "【さそり座】",
            "【いて座】",
            "【やぎ座】",
            "【みずがめ座】",
            "【うお座】"
        ]
    
        base_url = "https://voguegirl.jp/horoscope/shiitake/"
        date = dt.date.today()
        slack = slackweb.Slack(url=os.environ["SLACK_URL"])
    
        for c, c_kana in zip(constellations, constellations_kana):
            url = base_url + c + "/" + date.strftime("%Y%m%d") + "/"
            res = requests.get(url)
            soup = BeautifulSoup(res.text)
            res.close()
            base_txt = soup.find("div", class_="a-text").text
            txt = c_kana + "\n\n" + base_txt.strip() + "\n\n続きはこちら⇒ " + url
            slack.notify(text=txt)
    


    구현은 위가 됩니다.
    이 외에도
  • Cloud Functions 환경 변수에 SLACK_URL 로 incoming webhook URL을 등록
  • requirements.txt에 bs4slackweb를 등록해야 합니다.

  • 결과





    이것을 보고 모두 해피가 되었습니다.

    감상이라든가



    처음으로 Cloud Functions를 사용했지만 몹시 간단하게 할 수 있어서 즐거웠다.
    또한 파이썬에서의 스크래핑도 처음이었지만 직관적이고 사용하기 쉬웠다.
    무엇보다, 무엇인가를 만드는 것은 즐겁고, 사내에서 모두 기뻐해 주면 기쁘다!

    좋은 웹페이지 즐겨찾기