Windows
VPS
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 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
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!
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