Je suis un nouveau diplômé en 2020 et travaille dans l'informatique. Puisqu'il s'agit de mon premier article sur Qiita, je pense que certains points ne peuvent être atteints, mais merci.
J'étais accro à la création de bots en utilisant discordApi, alors j'ai essayé de faire un bot comme un titre pour m'entraîner au scraping.
Windows
VPS
J'omettrai l'acquisition de token de bot car il est beaucoup écrit dans d'autres articles. Installez la bibliothèque utilisée par la commande suivante
pip install beautifulsoup4
pip install requests
pip install discord
Le site ciblé pour le grattage cette fois est Nouveau site de contrôle des infections à virus Corona à Tokyo.
Tout d'abord, vérifions si vous pouvez obtenir les données souhaitées avec Beautiful Soup. Le code source est le suivant.
soup.py
import requests
from bs4 import BeautifulSoup
#Obtenez des données en vous connectant à l'URL avec get
res= requests.get("https://stopcovid19.metro.tokyo.lg.jp/cards/number-of-confirmed-cases/")
#Objet de magasin
soup = BeautifulSoup(res.text,"html.parser")
#Filtrez par l'étiquette et la classe de la pièce que vous voulez, supprimez la pièce qui n'utilise pas d'extrait
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+"Est une personne")
Quand j'essaye de faire ça J'ai pu l'obtenir fermement et j'ai pu effacer les blancs.
Ensuite, nous intégrerons cela dans le programme de bot discord.
En utilisant la fonction de boucle incluse dans discord.py
, j'ai créé un programme qui effectue une boucle toutes les 60 secondes, puis gratte et publie sur le canal de texte à l'heure spécifiée. La source est la suivante.
bot.py
#coding:UTF-8
import discord
from discord.ext import tasks
from datetime import datetime
import requests
from bs4 import BeautifulSoup
TOKEN = "hoge" #jeton
CHANNEL_ID = hoge #Identifiant de la chaine
#Générer les objets nécessaires à la connexion
client = discord.Client()
#Boucle une fois toutes les 60 secondes
@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)
#Le code précédent(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("Le nombre de personnes infectées à Tokyo aujourd'hui"+text+"Est une personne")
#Partie bonus. Possibilité de renvoyer des commentaires en réponse à un mot spécifié
@client.event
async def on_message(message):
#Ignorer si l'expéditeur du message est Bot
if message.author.bot:
return
#Si vous dites "Shinjuku", "Dense" sera retourné
if message.content == 'Shinjuku':
await message.channel.send('Dense')
if message.content == 'Quartier Edogawa':
await message.channel.send('Dense')
#Exécution du traitement en boucle
loop.start()
#Lancement du bot
client.run(TOKEN)
L'heure est fixée à 20h05 car on estime que le nombre de personnes infectées sur le site utilisé cette fois-ci sera mis à jour à 20h00. Résultat d'exécution
docker run -it --name hoge python /bin/bash
Créez un environnement python avec
docker exec -it hoge bash
Je suis entré et j'ai commencé à travailler.
Tout d'abord, installez les bibliothèques nécessaires avec pip.
pip install beautifulsoup4
pip install requests
pip install discord
Je ne peux pas éditer sans vim
apt-get update
apt-get install vim
Je vais le mettre.
Parce que le fuseau horaire par défaut est UTC
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
Utilisez cette commande pour modifier le fuseau horaire.
Après cela, créez un dossier approprié, créez bot.py
dedans et copiez et collez la source. Ceci termine.
Si vous le démarrez avec python bot.py
, le bot démarrera sur la discorde et rapportera le nombre de personnes infectées par Corona aujourd'hui à Tokyo à l'heure spécifiée!
Cette fois, nous supposons que le site sera mis à jour à 20h00 et prendrons une décision définitive, mais la forme idéale est que le site sera mis à jour et le scraping sera effectué et le bot le rapportera. Dans la boucle, j'ai pensé qu'il serait possible d'écrire un programme qui compare les données acquises dans cette boucle avec les données acquises la dernière fois, le met à jour si cela correspond, et le bot le signale, donc s'il s'améliore, un autre article Je publierai tout ensemble.