Python: grattage partie 1

Qu'est-ce que le grattage?

À propos du grattage

Vous apprendrez des connaissances de base telles que les termes que vous devez connaître lors du scraping et la structure des pages Web.

Le grattage est le processus d'extraction automatique des informations nécessaires à partir d'une page Web.

Les «informations» auxquelles il est fait référence ici sont diverses, telles que du texte, des images et des liens. Vous pouvez éviter d'ouvrir manuellement le navigateur et collecter des informations, et vous pouvez collecter une grande quantité de données.

Le grattage est utilisé dans diverses situations, de l'usage personnel au travail et à la recherche.

Dans le domaine de l'apprentissage automatique, une grande quantité de données sur le Web est particulièrement utile pour le traitement du langage naturel et la reconnaissance d'images.
Ces dernières années, les données ouvertes (données publiées par le gouvernement, les gouvernements locaux, les entreprises, etc. avec autorisation d'utilisation gratuite) ont attiré l'attention.
Le grattage est également utile lors de la collecte de telles données.

Cependant, si le scraping est mal utilisé, il mettra une charge sur le serveur qui affiche la page Web. Soyez prudent lorsque vous l'utilisez.

Contrairement à l'API, le fournisseur de services ne la fournit pas aux développeurs. Si vous le faites sans l'autorisation de l'autre partie, vous pouvez violer les conditions du site Web.

Dans certains cas, la divulgation des données acquises est interdite. Certains sites Web interdisent le grattage, donc Veuillez lire attentivement les termes et conditions du site Web avant de procéder au grattage.

Flux de raclage

Vérifiez le déroulement général du grattage. Cela s'appelle aussi gratter tous ensemble.

Les termes exploration et grattage sont également utilisés pour chaque étape.

1, rencontrez les éléments de confirmation

Existe-t-il une API qui peut obtenir les informations souhaitées ou est-il acceptable de publier les données acquises? Vérifiez s'il y a une violation telle que le droit d'auteur.

2, acquisition de page Web (exploration)

Pour récupérer uniquement des informations arbitraires d'une page Web, vous devez d'abord obtenir la page Web.

Ce travail est également connu sous le nom d'exploration.

Pour les bibliothèques couramment utilisées

urllib, requêtes, etc.

3, acquisition de données à partir de la page Web

Une fois que vous avez une page Web, obtenez les informations dont vous avez besoin.

Il existe différentes bibliothèques telles que re, lxml et Beautiful Soup.

Pour être précis, ce processus s'appelle le grattage.

4, stockage de données

Les données acquises par scraping sont enregistrées dans une base de données ou localement (votre propre PC)

La principale méthode de grattage

Voici trois façons simples de faire du grattage.

1, commande wget

Comme l'une des méthodes de grattage les plus simples Téléchargez la page Web avec la commande wget Il existe une méthode de traitement de texte à l'aide de la commande unix ou d'expressions régulières.

Cette méthode peut être facilement effectuée à partir de la ligne de commande C'est très simple car il ne peut être traité qu'avec les connaissances de base de la commande unix.

D'autre part, parce que c'est simple, il y a aussi un manque de fonctions pratiques. Il présente également l'inconvénient d'être difficile à traiter pour des données complexes. Ceci est utile, par exemple, lors de la récupération d'un ensemble de données formaté.

$ wget http://scraping.aidemy.net

2, outil de grattage Web

Logiciels fournis, extensions Google Chrome, feuilles de calcul Google, etc. Il existe différents outils.

Il a l'avantage d'être facile à utiliser avec presque aucun code à écrire. Il existe également des inconvénients tels que des fonctions limitées, une utilisation différente et peuvent être facturés.

la programmation

Vous pouvez effectuer un scraping dans différents langages de programmation.

Bien qu'il soit pratique car il peut traiter des données complexes et des données dynamiques Vous devez comprendre la grammaire et les méthodes de traitement.

Python ne peut être récupéré qu'avec des bibliothèques standard

Bibliothèques tierces plus puissantes (bibliothèques publiées par des utilisateurs du monde entier en dehors des bibliothèques standard) Existe.

Avec de tels outils, vous pouvez rapidement gratter avec un programme relativement court.

Surtout parce que Python est utile pour le prétraitement tel que l'analyse de données et l'apprentissage automatique. On peut dire qu'il a une forte affinité avec le traitement et la visualisation post-grattage.

À propos du HTML

Qu'est-ce que le HTML

Qu'est-ce que le HTML

Abréviation pour Hyper Text Markup Language

C'est l'un des langages de balisage les plus basiques pour créer des pages Web.

Qu'est-ce que HTML (Hyper Text Markup Language)? Comme son nom l'indique, il s'agit d'un langage de texte et de balisage hautes performances.

Un langage de balisage est un langage pour décrire la structure visuelle d'une phrase.
C'est principalement un langage pour faciliter la lecture des pages Web.

Comme le mot «balisage» l'indique, une marque (balise) est attachée et la taille et la position des caractères, des liens d'image, etc. sont incorporés.

Les langages de balisage incluent XML ainsi que HTML.

XML a une structure adaptée pour échanger des données entre plusieurs applications via Internet.

Méthode d'encodage

Le codage est le codage de signaux analogiques et de données numériques à l'aide d'une méthode spécifique. C'est l'une des façons de formater les données dans un autre format selon certaines règles.

L'ordinateur traite numériquement. Affichez simplement avec des lettres et des symboles pour que les humains puissent facilement comprendre En fait, il existe des nombres (chaînes de bits) qui correspondent à tous les caractères et symboles.

La méthode pour déterminer quel caractère est affecté à quelle chaîne de bits est appelée code de caractère.

Par exemple, il existe des codes de caractères appelés UTF-8 et Shift-JIS.

Le japonais «a» est «0xe38182» dans la table des codes de caractères UTF-8 Il s'agit de "0x81a0" dans la table de codes de caractères Shift-JIS.

Décoder

Le décodage est le retour des données encodées à leur format d'origine.

C'est ce qu'on appelle le décryptage.

Par exemple, décoder une vidéo signifie convertir les données numériques enregistrées sur le DVD en vidéo originale. Si vous ne décodez pas de la même manière que lors de l'encodage, les données texte seront déformées.

Par exemple, il existe un fichier écrit en UTF-8 comme suit.

Mon nom est Taro Yamada.

Si vous décodez ce fichier avec Shift-JIS, qui est différent de l'encodage, ce sera comme suit.

聘 √. 蜷 Sakaki 縺 螻

Fondamentalement, le navigateur Web reconnaît et décode automatiquement le code de caractère. Les utilisateurs peuvent généralement naviguer sans être conscients de ces choses.

Obtenez une page Web

Obtenir une page Web avec urllib

Utilisez Python pour obtenir (explorer) les pages Web étape par étape.

Pour obtenir une page Web, dans la bibliothèque standard

urllib.Utilisation du module de requête

Spécifiez l'URL dans l'argument de la méthode urlopen incluse dans ce module. urlopen () renvoie un objet de type HTTPResponse.

from urllib.request import urlopen

#Spécifiez l'URL de la page d'accueil Google à titre d'exemple
f = urlopen("https://www.google.co.jp")

# `urlopen()`Renvoie un objet de type HTTPResponse
print(type(f))
# >>>Résultat de sortie
<class 'http.client.HTTPResponse'>

Pour se référer à la page Web récupérée

Utilisez la méthode read.

Cependant, les données sont toujours codées (non décodées) simplement en les lisant avec la méthode read. Il convient de noter que le type de données est de type octet.

from urllib.request import urlopen

#Spécifiez l'URL de la page d'accueil Google à titre d'exemple
f = urlopen("https://www.google.co.jp")

# `urlopen()`Le corps du HTML obtenu dans`read()`Se référer à
read = f.read()

print(type(read))
print(read)
>>>Résultat de sortie
# `read()`Le type de données est le type d'octet
<class 'bytes'>

# `read()`C'est le contenu du HTML référencé dans
b'<!doctype html><html itemscope=.....Ce qui suit est omis

Comme l'exemple ci-dessus

read()Si vous ne spécifiez pas le nombre de caractères à lire comme argument pour
Obtenez tous les éléments d'une page Web
read(nombre de mots)Et l'argument
Obtient le nombre de caractères spécifié depuis le début.

Obtenez le code de caractère de l'en-tête HTTP

Dans la section précédente, la méthode urlopen renvoie un objet de type HTTPResponse. J'ai confirmé que la réponse obtenue par la méthode de lecture de cet objet est de type octet.

En outre, la raison pour laquelle le type de données de cette réponse est le type d'octet Cela était dû au fait que la page Web chargée n'était pas décodée avec les données encodées brutes.

Pour gérer la réponse acquise en tant que type str Vous devez spécifier le code de caractère correct pour le décodage.

Pour connaître le code de caractère utilisé sur une page Web
De l'objet de type HTTPResponse obtenu par la méthode urlopen
Content-Accédez à l'en-tête Type.
Content-Pour faire référence à l'en-tête Type
Utilisez la méthode getheader
Le contenu comme argument-Spécifiez le type.
from urllib.request import urlopen

#Spécifiez l'URL de la page d'accueil Google à titre d'exemple
f = urlopen("https://www.google.co.jp")

#En-tête HTTP`Content-Type`Obtenez la valeur de
f.getheader("Content-Type")
# >>>Résultat de sortie
'text/html; charset=Shift_JIS'

La valeur de l'en-tête Content-Type est renvoyée sous la forme "texte / html; charset = Shift_JIS".

Ce jeu de caractères = est le code de caractère de la page Web.

Le code de caractère de l'exemple google.co.jp est Shift_JIS.

Si charset=Si n'est pas défini, la plupart des pages Web japonaises
UTF-Vous pouvez le considérer comme 8.

Pour obtenir le code de caractère, utilisez l'expression régulière ci-dessus Vous pouvez également l'obtenir à partir de la valeur de l'en-tête Content-Type,

En pratique, combinez info () et get_content_charset () pour obtenir ce qui suit.

La méthode info renvoie un objet de type HTTPMessage.
Obtenez de cet objet_content_Obtenez le jeu de caractères avec la méthode charset.
from urllib.request import urlopen

#Spécifiez l'URL de la page d'accueil Google à titre d'exemple
f = urlopen("https://www.google.co.jp")

# info()alors`Type de message HTTP`Obtenir un objet
# get_content_charset()alors`charset`Avoir
#De l'argument`failobj=`Spécifie le codage lorsque le jeu de caractères n'est pas spécifié
encoding = f.info().get_content_charset(failobj="utf-8")

print(encoding)
# >>>Résultat de sortie
shift_jis

Obtenez le code HTML

Depuis que j'ai le code de caractère de la page Web Ensuite, obtenez le corps HTML décodé avec le code de caractère correct.

Decode utilise la méthode de décodage
Spécifiez le codage dans l'argument.
from urllib.request import urlopen

#Spécifiez l'URL de la page d'accueil Google à titre d'exemple
f = urlopen("https://www.google.co.jp")

#Obtenir le jeu de caractères
encoding = f.info().get_content_charset(failobj="utf-8")

# decode()Obtenez du HTML en spécifiant le codage dans
text = f.read().decode(encoding)

print(text)
# >>>Résultat de sortie
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head>.....Ce qui suit est omis

Obtenez une page Web facilement

Jusqu'à présent, nous avons utilisé urllib pour obtenir les éléments de la page Web. Pas une bibliothèque standard ici Obtenez des pages Web plus facilement que urllib

Présentation du module de requêtes.

urllib est facile à utiliser si vous n'avez que des messages et recevez des demandes Si vous voulez faire quelque chose d'un peu élaboré, comme ajouter un en-tête HTTP ou une authentification de base (généralement une authentification par mot de passe) Un prétraitement peu gênant est nécessaire.

Le module de requêtes traite automatiquement le décodage du code de caractère et la compression de fichiers et de dossiers. Vous pouvez opérer avec une simple description dans une couche supérieure.

#Importez le module de repuests
import requests

# `requests.get()`Obtient l'objet Response pour l'URL spécifiée dans
r = requests.get("https://www.google.co.jp")

#Vous pouvez obtenir le code de caractère de l'objet Response avec l'attribut encoding
print(r.encoding)
>>>Résultat de sortie
Shift_JIS
#Vous pouvez obtenir la réponse automatiquement décodée en type str avec l'attribut text.
print(r.text)
>>>Résultat de sortie
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head>.....Ce qui suit est omis

Recommended Posts

Python: grattage partie 1
Python: grattage, partie 2
[Scraping] Scraping Python
Grattage avec Selenium + Python Partie 1
Grattage avec Selenium + Python Partie 2
Mémo de raclage Python
Scraping Python get_ranker_categories
Grattage avec Python
Grattage avec Python
QGIS + Python Partie 1
Python racle eBay
Grattage Python get_title
Scraping à l'aide de Python
Python3 commence la partie 1
Automatisez des tâches simples avec Python Part1 Scraping
[Part1] Scraping avec Python → Organisez jusqu'à csv!
Grattage en Python (préparation)
Essayez de gratter avec Python.
UnicodeEncodeError: 'cp932' pendant le scraping Python
Grattage avec Python + PhantomJS
Mémorandum de base Python partie 2
Mémo de base Python - Partie 2
Grattage avec du sélénium [Python]
Scraping avec Python + PyQuery
Mémo de base Python - Partie 1
Scraping RSS avec Python
Scraping à l'aide de Python 3.5 async / await
Traitement d'image avec Python (partie 2)
J'ai essayé de gratter avec Python
Etudier Python avec freeCodeCamp part1
Images en bordure avec python Partie 1
Application Python: Pandas Partie 1: Basique
Application Python: Pandas Partie 2: Série
Web scraping avec python + JupyterLab
Grattage au sélénium en Python
Python: prévision de survie de navire, partie 2
[Python] Scraping dans AWS Lambda
python super débutant essaie de gratter
Python
Grattage avec chromedriver en python
Python: Apprentissage supervisé: Hyper Paramètres Partie 1
Scraping à l'aide de la syntaxe Python 3.5 Async
Mémo de grammaire de base Python (1)
Grattage avec du sélénium en Python
Python: prévision de survie des navires, partie 1
Etudier Python avec freeCodeCamp part2
Traitement d'image avec Python (partie 1)
Résolution de Nampre avec Python (partie 2)
Web scraping avec Selenium (Python)
Traitement d'image avec Python (3)
Python: prévision de survie des navires, partie 3
Python: prévision du cours de l'action, partie 2
UI Automation Partie 2 en Python
Scraping prévisions météorologiques avec python
Python: apprentissage supervisé: Hyper Paramètre partie 2
[Python + Selenium] Conseils pour le grattage
J'ai essayé de gratter avec du python
Web scraping débutant avec python