[PYTHON]

Ausführungsumgebung

Windows

VPS

Verfahren

Bauen Sie auf Windows auf und überprüfen Sie die Funktion des Bots

Ich werde den Token-Erwerb von Bot weglassen, da er in anderen Artikeln viel geschrieben ist. Installieren Sie die vom folgenden Befehl verwendete Bibliothek pip install beautifulsoup4 pip install requests pip install discord Die Site, auf die dieses Mal abgekratzt werden soll, ist New Corona Virus Infectious Disease Control Site in Tokio. Lassen Sie uns zunächst überprüfen, ob Sie mit Beautiful Soup die gewünschten Daten erhalten können. Der Quellcode lautet wie folgt.

soup.py



import requests
from bs4 import BeautifulSoup

#Holen Sie sich Daten, indem Sie mit get eine Verbindung zur URL herstellen
res= requests.get("https://stopcovid19.metro.tokyo.lg.jp/cards/number-of-confirmed-cases/")

#Objekt speichern
soup = BeautifulSoup(res.text,"html.parser")

#Filtern Sie nach dem Tag und der Klasse des gewünschten Teils und entfernen Sie das Teil, das keinen Extrakt verwendet
con = soup.find("span",class_="DataView-DataInfo-summary")
con=soup.find("small",class_="DataView-DataInfo-summary-unit").extract()

text=con.get_text()

text= text.strip()


print(text+"Ist eine Person")

Wenn ich das versuche image.png Ich konnte es fest bekommen und die Rohlinge löschen.

Als nächstes werden wir dies in das Discord-Bot-Programm integrieren. Mit der in discord.py enthaltenen Schleifenfunktion habe ich ein Programm erstellt, das alle 60 Sekunden eine Schleife durchführt und dann zum angegebenen Zeitpunkt kratzt und auf dem Textkanal veröffentlicht. Die Quelle ist wie folgt.

bot.py


#coding:UTF-8
import discord
from discord.ext import tasks
from datetime import datetime
import requests
from bs4 import BeautifulSoup

TOKEN = "hoge" #Zeichen
CHANNEL_ID = hoge #Kanal ID

#Generieren Sie die für die Verbindung benötigten Objekte
client = discord.Client()

#Schleife einmal alle 60 Sekunden
@tasks.loop(seconds=60)
async def loop():    
    now = datetime.now().strftime('%H:%M')
    
    if now == '20:05':
        await client.wait_until_ready()
        channel = client.get_channel(CHANNEL_ID)
        #Der vorherige Code(soup.py)
        res= requests.get("https://stopcovid19.metro.tokyo.lg.jp/cards/number-of-confirmed-cases/")
        soup = BeautifulSoup(res.text,"html.parser")
        con = soup.find("span",class_="DataView-DataInfo-summary")
        con=soup.find("small",class_="DataView-DataInfo-summary-unit").extract()
        text=con.get_text()
        text= text.strip() 

        await channel.send("Die Anzahl der Infizierten in Tokio heute"+text+"Ist eine Person") 

 #Bonus-Teil. Möglichkeit, Kommentare als Antwort auf ein bestimmtes Wort zurückzugeben
@client.event
async def on_message(message):
    #Ignorieren Sie, wenn der Absender der Nachricht Bot ist
    if message.author.bot:
        return
    #Wenn Sie "Shinjuku" sagen, wird "Dense" zurückgegeben
    if message.content == 'Shinjuku':
        await message.channel.send('Dicht')
    
    if message.content == 'Edogawa Ward':
        await message.channel.send('Dicht')

#Ausführung der Schleifenverarbeitung
loop.start()
#Bot-Start
client.run(TOKEN)

Die Zeit ist auf 20:05 Uhr eingestellt, da geschätzt wird, dass die Anzahl der infizierten Personen auf der Website, die dieses Mal verwendet wird, um 20:00 Uhr aktualisiert wird. Ausführungsergebnis image.png

Transport zum Docker

docker run -it --name hoge python /bin/bash Erstellen Sie eine Python-Umgebung mit docker exec -it hoge bash Ich ging hinein und fing an zu arbeiten. Installieren Sie zunächst die erforderlichen Bibliotheken mit pip. pip install beautifulsoup4 pip install requests pip install discord Ich kann nicht ohne vim bearbeiten apt-get update apt-get install vim Ich werde es einfügen. Weil die Standardzeitzone UTC ist ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime Verwenden Sie diesen Befehl, um die Zeitzone zu ändern. Erstellen Sie danach einen geeigneten Ordner, erstellen Sie darin "bot.py" und kopieren Sie die Quelle und fügen Sie sie ein. Damit ist der Vorgang abgeschlossen. Wenn Sie es mit python bot.py starten, startet der Bot mit der Zwietracht und meldet die Anzahl der Personen, die heute in Tokio mit Corona infiziert sind, zum angegebenen Zeitpunkt!

Verbesserungspunkte

Dieses Mal denke ich, dass die Site um 20:00 Uhr aktualisiert wird und eine endgültige Entscheidung trifft, aber die ideale Form ist, dass die Site aktualisiert wird und das Scraping durchgeführt wird und der Bot dies meldet. In der Schleife dachte ich, dass es möglich wäre, ein Programm zu schreiben, das die in dieser Schleife erfassten Daten mit den zuletzt erfassten Daten vergleicht, sie aktualisiert, wenn sie übereinstimmen, und der Bot meldet, also wenn es sich verbessert, einen anderen Artikel Ich werde alles zusammen posten.

Recommended Posts