[PYTHON] Je veux trouver facilement une délicieuse boutique

Y a-t-il quelque chose comme ça?

J'ai essayé de chercher sur mon smartphone pour trouver du riz dans un pays étrange, mais ...

――Il est difficile de trouver un restaurant très apprécié dans la liste s'il s'agit d'un journal alimentaire ――S'il s'agit d'une carte google, vous ne pouvez pas la comprendre à moins de cliquer sur chaque candidat recherché et de consulter les avis. ――Il est difficile de dire si le site d'avis est vraiment délicieux car il n'écrit pas d'avis négatifs.

Même si vous sortez votre smartphone et essayez de trouver un délicieux restaurant dans la ville, c'est difficile car vous ne pouvez pas trouver un restaurant très bien noté en un coup d'œil. *** Je veux connaître les magasins les mieux notés autour de mon emplacement actuel! *** *** Dans un tel cas, le plan de magasin très apprécié présenté sur cette page est pratique.

Que faire

En grattant, nous collectons des informations sur les boutiques présentées dans 100 Famous Eating Log Shops. En important ces informations dans Google My Map, nous créerons un plan de magasin très apprécié.

Avant de gratter

Extraire des données du Web et les convertir en données structurées pouvant être analysées s'appelle du scraping, mais il y a quelques mises en garde.

Tenez compte du droit d'auteur

Si les données collectées contiennent du matériel protégé par le droit d'auteur, le droit d'auteur doit être pris en compte. Ne communiquez pas les données collectées par grattage à des tiers et ne démarrez pas d'entreprise sur la base des données collectées. En revanche, il semble que la copie pour un usage privé soit autorisée.

Ne mettez pas une charge excessive sur la destination d'acquisition des données

Dans de nombreux cas, vous enverrez probablement plusieurs demandes au serveur Web pour collecter des données structurées. Sachez que l'envoi d'un grand nombre de requêtes dans un court laps de temps peut entraîner une crevaison du serveur Web. Dans le passé, il y avait un précédent d'arrestation involontaire.

Vérifiez les conditions d'utilisation

Veuillez lire attentivement les conditions d'utilisation car elles peuvent être grattantes ou interdites. Le site Web contient également robots.txt, un fichier texte permettant de contrôler le robot d'exploration. J'omettrai comment vérifier ce fichier, mais avant de gratter, vérifiez le robot.txt du site Web cible et suivez le contenu décrit.

Vérifiez vous-même la sécurité

J'ai brièvement expliqué les points ci-dessus, mais il est fort possible que ce ne soit pas suffisant car il s'agit d'une compilation originale. Faites vos propres recherches pour vous assurer qu'il n'y a aucun problème avant de gratter.

la mise en oeuvre

L'implémentation utilise python et sa bibliothèque, BeautifulSoup. Ce sont les plus importants en matière de grattage, ont de nombreux articles de référence et sont faciles à manipuler même pour les débutants, alors je les ai choisis.

main.py


import requests
from bs4 import BeautifulSoup
from time import sleep
import pandas

url = "https://award.tabelog.com/hyakumeiten/tonkatsu"
r = requests.get(url)

soup = BeautifulSoup(r.content, "html.parser")
shoplinks = soup.findAll('a', class_='list-shop__link-page')
rowdata = []
for shoplink in shoplinks:
    url = shoplink.get("href")
    rshop = requests.get(url)
    soup = BeautifulSoup(rshop.content, "html.parser")
    print("------------------")
    print(url)
    shopname = soup.find(
        "div", class_="rdheader-rstname").find("h2").find("span")
    print(shopname)
    if shopname is not None:
        shopname = shopname.get_text().strip()
    address = soup.find("p", class_="rstinfo-table__address")
    if address is not None:
        address = address.get_text()
    print(address)
    point = soup.find("span", class_="rdheader-rating__score-val-dtl")
    if point is not None:
        point = point.get_text().strip()
    print(point)
    regholiday = soup.find("dd", class_="rdheader-subinfo__closed-text")
    if regholiday is not None:
        regholiday = regholiday.get_text().strip()[0:10]
    print(regholiday)
    rowdata.append([shopname, address, point, regholiday, url])
    sleep(5)

print(rowdata)

df = pandas.DataFrame(
    rowdata, columns=["shopname", "address", "point", "regular holiday", "url"])
df.to_csv("tonkatsu" + ".csv", index=False)

Ce code correspond à 100 magasins célèbres 2019. Lorsque j'ai vérifié Hyakumeiten 2020, je n'ai pas pu obtenir les données car la structure de la page Web a changé.

Courir

Tout ce que vous avez à faire est d'installer python et d'exécuter ce script. En exécutant ce code, vous pouvez obtenir les données des magasins Tonkatsu sélectionnés comme 100 magasins célèbres avec csv. Si vous voulez obtenir les données de la boulette, vous pouvez changer la fin de l'url en gyoza et le tonkatsu de la dernière ligne en gyoza.

Importer sur ma carte

Tout ce que vous avez à faire est d'importer le csv généré dans My Maps de Google. Après avoir importé des csv de tous les genres, 100 magasins célèbres doivent être tracés comme ci-dessous. map.jpg

Résumé

De cette manière, en grattant, nous avons pu extraire les informations de magasin introduites dans les 100 restaurants célèbres de Eating Log sous forme de données structurées et les cartographier. Puisque Ma carte peut être consultée sur Andoroid, vous pouvez trouver instantanément les 100 magasins célèbres les plus proches de votre emplacement actuel.

Tâche

C'est un script que j'ai fait il y a pas mal de temps, mais quand je le regarde à nouveau, c'est un code tellement terrible qu'être un débutant en python n'est pas du tout une excuse ... En fait, il y a un script qui permet de récupérer le genre à partir de l'argument run-time, mais j'ai arrêté car c'est un niveau qui hésite à publier. Si ce qui suit est résolu, il peut être publié sur github.

--Fichier d'exécution --Enregistrement --Lire l'URL du fichier de configuration

référence

https://docs.pyq.jp/column/crawler.html https://www.cric.or.jp/qa/hajime/hajime8.html https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B%E4%B8%AD%E5%A4%AE%E5%9B%B3%E6%9B%B8%E9%A4%A8%E4%BA%8B%E4%BB%B6

Recommended Posts

Je veux trouver facilement une délicieuse boutique
Gratter et manger des bûches - je veux trouver un bon restaurant! ~ (Travail)
Je souhaite créer facilement un modèle de bruit
Je veux facilement implémenter le délai d'expiration en python
Je veux imprimer dans la notation d'inclusion
Je veux créer un environnement Python
Je veux INSÉRER un DataFrame dans MSSQL
Je veux créer une fenêtre avec Python
Quoi qu'il en soit, je veux vérifier facilement les données JSON
Je veux faire un jeu avec Python
Je ne veux pas passer un test de codage
Je souhaite créer un type d'implémentation pouvant être branché
Je veux écrire dans un fichier avec Python
Je souhaite télécharger une application Django sur heroku
Je veux répéter plusieurs fois un générateur Python
Je veux que DQN Puniki frappe un home run
100 coups sur le traitement d'image !! (021-030) Je veux faire une pause ...
Je veux donner un group_id à une trame de données pandas
Je veux faire la transition avec un bouton sur le ballon
Je veux escalader une montagne avec l'apprentissage par renforcement
Je veux écrire en Python! (2) Écrivons un test
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
Je veux diviser une chaîne de caractères avec hiragana
Je souhaite installer un package de Php Redis
[Python] Je veux faire d'une liste imbriquée un taple
Je souhaite créer manuellement une légende avec matplotlib
Je souhaite envoyer automatiquement un e-mail de création d'entreprise
Je veux faire fonctionner un ordinateur quantique avec Python
Je veux lier une variable locale avec lambda
Je veux résoudre SUDOKU
Je veux un générateur mox (2)
Je souhaite utiliser facilement les fonctions R avec le notebook ipython
Je souhaite supprimer facilement une colonne contenant NA dans R
Je veux créer un éditeur de blog avec l'administrateur de django
Je veux démarrer un environnement Jupyter avec une seule commande
[Python] Je souhaite obtenir un ensemble commun entre numpy
Je veux démarrer beaucoup de processus à partir de python
Je veux faire une macro de clic avec pyautogui (désir)
Je veux générer automatiquement un nom de groupe de metal moderne
Je veux faire une macro de clic avec pyautogui (Outlook)
Je souhaite utiliser un environnement virtuel avec jupyter notebook!
Je veux installer le package de requirements.txt avec poésie
Je souhaite envoyer un message de Python à LINE Bot
[Visualisation] Je veux dessiner un beau graphique avec Plotly
Je veux ajouter un joli complément à input () en python
Je veux créer un Dockerfile pour le moment.
Je veux trouver l'intersection d'une courbe de Bézier et d'une ligne droite (méthode de découpage de Bézier)
Je veux comprendre à peu près systemd
Je veux gratter des images et les former
Je veux faire ○○ avec les Pandas
Je veux copier l'annotation de yolo
Je veux déboguer avec Python
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
Je veux trouver automatiquement des pièces de haute qualité à partir des vidéos que j'ai tournées
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Configuration MacBookPro Après tout, je veux faire une installation propre