Mémo d'apprentissage "Scraping & Machine Learning avec Python"

introduction

Notes d'apprentissage des chapitres 1 à 3 de "Scraping & Machine Learning with Python". Les sujets liés au grattage vont du chapitre 1 au chapitre 3. Le quatrième et les suivants sont la partie apprentissage automatique.

Chapitre 1

1-1. Télécharger les données

Qu'est-ce que la bibliothèque urllib?

Un package de modules qui gèrent les URL. Voici un exemple de la méthode.

--urlretrieve () ・ ・ ・ Télécharger directement les données (les fichiers sont enregistrés localement) --urlopen () ・ ・ ・ Entrer en mémoire. Si vous voulez l'obtenir par ftp, changez simplement le paramètre https: // passé à urlopen () en ftp: //

Si vous souhaitez envoyer une demande avec des paramètres get, créez des données de paramètre clé / valeur avec des variables de type dictionnaire.

Utilisez le module urllib.parse pour encoder des variables url. Ajoutez la variable encodée à la chaîne url (n'oubliez pas le "?" Entre les deux).

Importez le module sys pour obtenir des arguments de ligne de commande.

1-2. Gratter avec une belle soupe

Qu'est-ce que la belle soupe?

Une bibliothèque qui analyse HTML et XML. Les données ne peuvent pas être téléchargées. Si vous souhaitez le télécharger, utilisez urllib.

Qu'est-ce que pip

système de gestion de paquets python.

Qu'est-ce que PyPI

Abréviation de Python Package Index.

Il existe différentes manières d'obtenir des éléments HTML

--Tracez la hiérarchie à partir de la balise à l'aide de points (.)

Si vous connaissez la structure HTML et les bases de css, vous pouvez en gros obtenir n'importe quelle donnée. Cependant, si la structure de la page change, elle doit être corrigée.

1-3. À propos du sélecteur CSS

Exemple: la page d'Aozora Bunko de Natsume Soseki https://www.aozora.gr.jp/index_pages/person148.html

Les résultats obtenus avec le sélecteur css pour la balise li en haut de la liste de travail sont les suivants.

body > ol:nth-child(8) > li:nth-child(1)

nième enfant (n) ・ ・ ・ Signification du nième élément

En regardant la page de travail, la balise \

    n'est pas utilisée ailleurs, donc dans ce cas, la partie ol: nth-child (8) peut être omise.

    Si vous écrivez un sélecteur CSS élégant, vous pouvez récupérer un élément spécifique en une seule fois.

    ** Il est important de se souvenir du format du sélecteur. Identique à la mémorisation des expressions régulières ** </ font>

    La caractéristique de la méthode find () est que vous pouvez spécifier plusieurs conditions à la fois.

    Il est également possible d'extraire des éléments en combinaison avec des expressions régulières.

    1-4. Téléchargez le lien complet

    Si la destination du lien de la balise \ est un chemin relatif, utilisez la méthode urllib.parse.urljoin () pour le convertir en chemin absolu.

    Pour télécharger le tout, vous devez télécharger le lien de manière récursive.

    Pour utiliser des expressions régulières, importez le module re.

    Chapitre 2

    2-1. Téléchargement à partir de sites nécessitant une connexion

    Un package appelé requêtes est pratique pour l'accès à l'aide de cookies.

    Démarrez une session avec la méthode requests.session ().

    Pour vérifier les données envoyées lors de la connexion, utilisez l'outil développeur du navigateur.

    Vérifiez dans l'onglet "Réseau" des outils de développement. Pour voir les données du formulaire soumis, cochez "Données du formulaire" dans l'onglet "En-tête".

    2-2. Grattage via le navigateur

    "Selenium" est un outil réputé pour contrôler à distance un navigateur Web.

    Si vous l'utilisez sans tête (sans affichage d'écran) depuis la ligne de commande, le navigateur ne démarrera pas un par un.

    En plus de Chrome, Firefox, Opera, etc., les navigateurs iOS et Android peuvent également être utilisés.

    Si vous accédez avec du sélénium, cela revient à accéder avec un navigateur, vous n'avez donc pas besoin de gérer la session.

    Vous pouvez faire beaucoup avec le sélénium. La plupart des opérations humaines dans le navigateur peuvent être effectuées automatiquement.

    De plus, si vous utilisez la méthode execute_script (), vous pouvez exécuter n'importe quel js.

    Avantages du sélénium

    • Vous pouvez manipuler librement les éléments DOM dans les pages HTML → Il est possible de l'utiliser comme par exemple en supprimant des éléments décoratifs sans rapport avec l'élément que vous souhaitez acquérir au préalable.
    • Vous pouvez appeler la fonction Javascript dans la page à tout moment. → Vous pouvez obtenir toutes les données sur la page

    2-3. Dojo de raclage

    Puisque Wikipédia interdit l'exploration, le grattage direct est NG. Il existe un site sur lequel vous pouvez obtenir des données de vidage à la place, alors utilisez ces données.

    
    for row in result:
        print("," .join(row))
    

    À propos de la méthode de BeautifulSoup

    --find_all () ・ ・ ・ Si vous donnez une liste à la méthode, vous pouvez obtenir plusieurs balises à la fois. --find_elements_by_css_selector () ・ ・ ・ "elements" et ** pluriel **, donc obtenez plusieurs éléments à la fois --find_element_by_css_selector () ・ ・ ・ "élément" et ** forme singulière **, donc n'obtenez qu'un seul élément à la fois. Si vous appelez cette méthode dans l'intention d'en acquérir plusieurs, ce n'est pas une erreur grammaticale, mais cela ne fonctionne pas comme prévu, alors soyez prudent.

    Vous pouvez également prendre une capture d'écran en utilisant la méthode browser.save_screenshot (). Ceci est utile lorsque vous voulez savoir à quoi ressemble l'écran réel lorsque vous utilisez le mode sans tête.

    Il y a de nombreuses parties du grattage qui ne peuvent être comprises qu'en le testant réellement. Pensez au type d'opération possible lors de l'analyse de l'écran réel (HTML).

    ** Il est important de comprendre la structure du site. De plus, la connaissance du CSS est requise. ** </ font>

    2-4. Acquisition de données depuis l'API Web

    Qu'est-ce que l'API Web (Web Application Programming Interface)?

    Une fonction d'un site est publiée pour pouvoir être utilisée de l'extérieur. Communiquez via la communication HTTP et acquérez des données au format XML ou JSON.

    Sachez que les spécifications de l'API Web peuvent changer en raison de la commodité du côté opération.

    méthode format ()

    Une partie de la chaîne de caractères peut être modifiée ultérieurement en tant que valeur de variable.

    (Exemple)

    
    str = "hogehoge{name}fugafuga"
    str.format(name="Eric Clapton")
    

    Qu'est-ce qu'une expression lambda?

    ** Nom de la fonction = lambda Argument: Traitement du contenu ** Une fonction qui peut être écrite au format. (Exemple)

    
    k2c = lambda k: k - 273.5
    

    2-5. Cron et exploration régulière

    Pour macOS et Linux, un processus démon appelé "cron" est utilisé. Utilisez "Planificateur de tâches" sur Windows.

    Qu'est-ce qu'un démon?

    Un programme qui réside sur la mémoire principale d'un système d'exploitation UNIX et fournit une fonction spécifique. Type de processus d'arrière-plan qui se traite indépendamment des opérations de l'utilisateur.

    ** Traitement périodique principal **

    1. Collecte de données
    2. Sauvegarde, sauvegarde du journal
    3. Surveillance de la vie et de la mort

    Pour définir cron, exécutez la commande "crontab" et éditez le fichier qui y est ouvert. Si vous souhaitez éditer cron sur mac, l'éditeur nano est pratique.

    2-6. Grattage avec Scrapy

    Qu'est-ce que Scrapy?

    Un cadre pour l'exploration et le grattage.

    ** Flux de travail de base **

    1. Créez un projet à l'aide de la commande scrapy
    2. Écrivez la classe Spider pour créer un processus d'exploration et d'acquisition de données
    3. Exécutez scrapy à partir de la ligne de commande

    Créez une sous-classe qui hérite de la classe Spider. L'emplacement est le répertoire des araignées.

    Principales méthodes de la classe Spider

    --parse () ・ ・ ・ Décrit le processus d'analyse du texte à effectuer après l'acquisition des données. --css () ・ ・ ・ Extraire les éléments DOM à l'aide du sélecteur CSS --extrait () ・ ・ ・ Obtenez plusieurs éléments contenus dans celui-ci sous forme de liste --extract_first () ・ ・ ・ Une méthode qui renvoie le premier élément inclus dans le résultat

    exemple de commande d'exécution de scrapy

    scrapy crawl soseki --nolog
    

    Si "--nolog" est décrit, le journal des opérations est omis. S'il n'est pas joint, le journal des opérations sera sorti sur la console.

    La valeur de retour de la méthode est yield. La règle est de retourner par rendement au lieu de retour.

    • Signification de rendement: donner naissance, apporter, donner naissance, causer

    Qu'est-ce qu'une coquille tremblante?

    Un shell qui peut exécuter Scrapy de manière interactive. Ceci est utile pour vérifier que les données peuvent être acquises correctement avec le sélecteur CSS.

    2-7. Téléchargez toutes les oeuvres de Natsume Soseki avec Scrapy

    Une commande pour créer une sous-classe de la classe Spider.

    scrapy genspider soseki3 www.aozora.gr.jp
    

    La méthode parse () est appelée automatiquement après avoir obtenu l'URL spécifiée dans start_urls.

    Utilisez la méthode response.follow () pour obtenir la page liée.

    Pour télécharger le fichier, utilisez la méthode scrapy.Request (). Vous pouvez spécifier la méthode une fois le traitement terminé dans le paramètre de rappel.

    2-8. Téléchargez un site Web dynamique avec Scrapy et Selenium

    Scrapy peut étendre ses fonctionnalités en introduisant un middleware. Le mécanisme peut être introduit pour incorporer du sélénium.

    ** Format lorsque spécifié ** (Nom du répertoire du projet). (Nom du fichier Middleware). (Nom de la classe Middleware)

    
    #Exemple d'enregistrement de middleware
    custom_settings = {
        "DOWNLOADER_MIDDLEWARES": {
            "sakusibbs.selenium_middleware.SeleniumMiddleware": 0
        }
    }
    

    La méthode start_requests () est une méthode qui définit le traitement qui est automatiquement exécuté juste avant la requête.

    chapitre 3

    3-1. Les données Web sont dans différents formats

    Il existe deux types de données distribuées sur le Web: les données texte et les données binaires.

    --Données textuelles Exemple de format: fichier texte, XML, JSON, YAML, CSV Les données de texte doivent être programmées avec le code de caractère et l'encodage à l'esprit.

    --Données binaires Exemple de format: Image (png, jpeg, gif, etc.), format Excel La taille des données est inférieure à celle des données texte.

    Veuillez noter que l'URL des données relatives à la prévention des catastrophes de la ville de Yokohama dans le livre a été modifiée. Au 22 octobre 2020: https://www.city.yokohama.lg.jp/kurashi/bousai-kyukyu-bohan/bousai-saigai/bosai/data/data.files/0006_20180911.xml

    Notez que toutes les lettres majuscules sont converties en minuscules lors de l'analyse XML avec BeautifulSoup.

    (Exemple)

    
    <LocationInformation>
    	<Type>Base régionale de prévention des catastrophes</Type>
    	<Definition>Il s'agit d'une base équipée d'un lieu d'évacuation des habitants touchés, de transmission et transmission d'informations et de fonctions de stockage.</Definition>
    	<Name>École primaire de blé brut</Name>
    	<Address>4-15 Orge brute, Tsurumi-ku, ville de Yokohama, préfecture de Kanagawa-1</Address>
    	<Lat>35.49547584</Lat>
    	<Lon>139.6710972</Lon>
    	<Kana>Namamugi Shogakko</Kana>
    	<Ward>Quartier Tsurumi</Ward>
    	<WardCode>01</WardCode>
    </LocationInformation>
    

    Si vous souhaitez obtenir des "informations de localisation" à partir des données ci-dessus, ce sera comme suit.

    Erreur: soup.find_all ("LocationInformation"): Correct: soup.find_all ("informations de localisation"):

    Lorsque vous traitez des fichiers Excel, installez xlrd en plus de openpyxl.

    3-2. À propos de la base de données

    python prend en charge diverses bases de données. SQLite est intégré à la bibliothèque standard et peut être utilisé immédiatement en important sqlite3.

    dans le livre P160 est incorrect.

    L'installation est requise à l'avance pour utiliser MySQL. Installez avec apt-get dans un environnement Linux. Pour Mac et Windows, il est pratique d'installer MAMP, qui contient également l'outil de gestion MySQL "phpMyAdmin".

    Différence dans la façon de spécifier des éléments variables dans SQL.

    • SQLite ...? --MySQL ・ ・ ・% s

    Qu'est-ce que MongoDB

    L'une des bases de données de type de document. Le système de gestion de base de données relationnelle (SGBDR) nécessite une définition de schéma à l'aide de CREATE TABLE, mais la base de données de type de document ne nécessite pas de définition de schéma.

    Qu'est-ce que TinyDB

    Une bibliothèque pour utiliser des bases de données orientées document. Il est plus facile à utiliser depuis python que MongoDB. (MongoDB nécessite l'installation de MongoDB lui-même, mais TinyDB peut être utilisé en installant le package à l'aide de pip)

    Si vous traitez avec des données d'une certaine taille, MongoDB est plus approprié.

    Recommended Posts