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.
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.
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.
système de gestion de paquets python.
Abréviation de Python Package Index.
--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.
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 \
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.
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.
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".
"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.
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))
--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>
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.
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")
** Nom de la fonction = lambda Argument: Traitement du contenu ** Une fonction qui peut être écrite au format. (Exemple)
k2c = lambda k: k - 273.5
Pour macOS et Linux, un processus démon appelé "cron" est utilisé. Utilisez "Planificateur de tâches" sur Windows.
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 **
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.
Un cadre pour l'exploration et le grattage.
** Flux de travail de base **
Créez une sous-classe qui hérite de la classe Spider. L'emplacement est le répertoire des araignées.
--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.
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.
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.
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.
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.
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.
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.
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.
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