[PYTHON] Vous serez ingénieur dans 100 jours ――Jour 71 ――Programmation ――À propos du scraping 2

Cliquez ici jusqu'à hier

Vous deviendrez ingénieur dans 100 jours-70-Programmation-À propos du scraping

Vous deviendrez ingénieur dans 100 jours - Jour 66 - Programmation - À propos du traitement du langage naturel

Vous deviendrez ingénieur dans 100 jours - Jour 63 - Programmation - À propos de la probabilité 1

Vous deviendrez ingénieur dans 100 jours - Jour 59 - Programmation - À propos des algorithmes

Vous deviendrez ingénieur dans 100 jours --- Jour 53 --Git --À propos de Git

Vous deviendrez ingénieur dans 100 jours - Jour 42 --Cloud --À propos des services cloud

Vous deviendrez ingénieur dans 100 jours - Jour 36 --Base de données --À propos de la base de données

Vous deviendrez ingénieur dans 100 jours-24 jours-Python-Bases du langage Python 1

Vous deviendrez ingénieur dans 100 jours --Jour 18 --Javascript --Les bases de JavaScript 1

Vous deviendrez ingénieur dans 100 jours - Jour 14 --CSS --CSS Basics 1

Vous deviendrez ingénieur dans 100 jours - Jour 6 --HTML - Bases du HTML 1

Cette fois, c'est une continuation du grattage.

À propos de la communication

Nous allons gratter dans le langage Python. Puisque le grattage implique la communication Vous devez savoir comment fonctionne la communication.

Les sites Web sont situés sur des serveurs du monde entier. Sur le WEB, la communication avec le serveur se fait essentiellement en utilisant le «protocole (convention de communication)» appelé «HTTP (HyperText Transfer Protocol)».

Demande du navigateur au serveur La réponse du serveur au navigateur est appelée «réponse».

Les échanges de base sur le WEB sont établis par requête / réponse (R / R) Il est essentiellement réalisé en échangeant des messages texte

** Exemple de recherche sur site ** Effectuer une recherche avec l'outil de recherche du navigateur Request Le serveur répond à la demande avec le résultat «Réponse» Le navigateur affiche les résultats de la recherche en fonction de la réponse

Il existe plusieurs spécifications pour la «communication HTTP», et il existe plusieurs façons d'envoyer des requêtes.

** OBTENIR une communication **

GET des requêtes en ajoutant des paramètres à l'URL

Exemple: http://otupy.com?p=abc&u=u123 Après ?, C'est un paramètre, et le paramètre est une combinaison de «clé = valeur» et «&».

** Communication POST **

POST est inclus dans le corps et demandé

http://otupy.com

Demander le corps param:p:ab,u:u123

** Utilisez POST et GET correctement ** La communication elle-même se fait en sélectionnant une méthode de communication appropriée dans le navigateur Le programme doit spécifier la méthode de communication.

demande

Une demande d'un navigateur au serveur d'un site Web est appelée une demande.

Lorsque vous ouvrez une page Web dans votre navigateur, le navigateur envoie un message de demande au serveur, tel que:

GET exemple:

En-tête de la demande
GET http://www.otupy.com/ex/http.htm HTTP/1.1
Host: www.otupy.com
Proxy-Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Referer: https://www.google.co.jp/
Accept-Encoding: gzip, deflate
Accept-Language: ja,en-US;q=0.9,en;q=0.8

Exemple POST:

En-tête de la demande:
POST /hoge/ HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 22
Cache-Control: max-age=0
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Referer: http://localhost:8080/hoge/
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.8,en;q=0.6

Demander le corps:
name=hoge&comment=hoge

La demande a une partie «en-tête» et une partie «corps», et le type d'informations emballées et envoyées dépend de la méthode de communication.

Par conséquent, il est nécessaire de remplir les informations appropriées et de faire une demande lors de l'accès par programme.

Accès programmatique

Essayons de gratter tout de suite.

En Python, vous pouvez communiquer avec une bibliothèque appelée «requests».


import requests

Puisque le site Web de destination d'accès est requis, spécifiez-le et communiquez avec GET. requests.get(URL)

url = 'http://www.otupy.net/'
res = requests.get(url)
print(res)

<Response [200]>

Suite à la communication, une "réponse" est renvoyée. Si la communication réussit, vous pouvez obtenir les informations de la destination d'accès.

Bien sûr, c'est la communication, donc cela peut échouer.

Résultat de la communication (réponse)

À la suite de la communication, la «réponse» est divisée en plusieurs codes d'état. La communication est réussie dans les années 200, mais dans les années 400 et 500 La communication ayant échoué, il est nécessaire de vérifier si l'URL est mal saisie ou si le serveur de l'autre partie est accessible.

Classification nombre message La description
information 100 Continue Le traitement se poursuit. Veuillez envoyer une autre demande.
information 101 Sitching Protocols Modifiez le protocole spécifié dans l'en-tête de mise à niveau et demandez à nouveau.
Succès 200 OK Réussi.
Succès 201 Created Le nouveau contenu a été créé à l'emplacement spécifié dans l'en-tête Emplacement.
Succès 202 Accepted La demande a été acceptée. Cependant, le processus n'est pas terminé.
Succès 203 Non-Authoritative Information L'en-tête de réponse est différent de ce que le serveur d'origine a renvoyé, mais le processus réussit.
Succès 204 No Content Il n'y a pas de contenu, mais le processus a réussi.
Succès 205 Reset Content Maintenant que la demande a été acceptée, veuillez supprimer le contenu actuel (écran). ..
Succès 206 Partial Content Seule une partie du contenu sera retournée.
transfert 300 Multiple Choices Il existe plusieurs options pour obtenir le contenu.
transfert 301 Moved Permanently Vous avez déménagé vers un autre emplacement spécifié dans l'en-tête Emplacement.
transfert 302 Found Trouvé dans un autre emplacement spécifié dans l'en-tête Emplacement. Veuillez regarder là-bas.
transfert 303 See Other Regardez ailleurs dans l'en-tête Location.
transfert 304 Not Modified Pas à jour. Si-Modified-Il sera retourné si l'en-tête Since est utilisé.
transfert 305 Use Proxy Utilisez le proxy spécifié dans l'en-tête Location.
transfert 306 (Unused) inutilisé.
transfert 307 Temporary Redirect Je déménage temporairement vers un autre endroit.
Erreur client 400 Bad Request La demande n'est pas valide.
Erreur client 401 Unauthorized Non authentifié.
Erreur client 402 Payment Required Le paiement est requis.
Erreur client 403 Forbidden L'accès n'est pas autorisé.
Erreur client 404 Not Found Pas trouvé.
Erreur client 405 Method Not Allowed La méthode spécifiée n'est pas prise en charge.
Erreur client 406 Not Acceptable Interdit.
Erreur client 407 Proxy Authentication Required L'authentification proxy est requise.
Erreur client 408 Request Timeout La demande a expiré.
Erreur client 409 Conflict La demande est en conflit.
Erreur client 410 Gone Le contenu demandé a disparu.
Erreur client 411 Length Required Content-Veuillez ajouter un en-tête de longueur à la demande.
Erreur client 412 Precondition Failed If-...Ne remplit pas les conditions spécifiées dans l'en-tête.
Erreur client 413 Request Entity Too Large L'entité demandée est trop grande.
Erreur client 414 Request-URI Too Long L'URI demandé est trop long.
Erreur client 415 Unsupported Media Type Type de support non pris en charge.
Erreur client 416 Requested Range Not Satisfiable La plage demandée n'est pas valide.
Erreur client 417 Expectation Failed La demande d'extension spécifiée dans l'en-tête Expect a échoué.
Erreur du serveur 500 Internal Server Error Une erreur inattendue s'est produite sur le serveur.
Erreur du serveur 501 Not Implemented Pas mis en œuvre.
Erreur du serveur 502 Bad Gateway La passerelle n'est pas valide.
Erreur du serveur 503 Service Unavailable Le service n'est pas disponible.
Erreur du serveur 504 Gateway Timeout La passerelle a expiré.
Erreur du serveur 505 HTTP Version Not Supported Cette version HTTP n'est pas prise en charge.

Confirmation du résultat de la communication par programme

Vérifions maintenant le résultat de la communication par programme.

Variable de réponse .status_code Vous pouvez vérifier le code d'état à l'adresse.


url = 'http://www.otupy.net/'
res = requests.get(url)
print(res.status_code)

200

Si ce n'est pas 200, la communication a échoué et les informations sur le site Web ne peuvent pas être obtenues.

Si le nombre est 200, la communication est réussie et vous pouvez voir les informations obtenues sur le site Web.

Le résultat de la communication étant stocké dans une variable, vous pouvez voir différents contenus.

URL de la demande Variable de réponse .url

Code d'état Variable de réponse .status_code

Obtenir le corps de la réponse au format texte Variable de réponse .text

Obtenir le corps de la réponse au format binaire Variable de réponse .content

biscuit Variable de réponse .cookies

Obtenir des informations d'encodage Variable de réponse .encoding

À partir de là, nous utiliserons les informations textuelles acquises pour les séparer en informations nécessaires.

#Obtenez la réponse au format binaire, convertissez-la en caractères et affichez-la(1000 caractères)
print(res.content[0:1000].decode('utf-8'))

....

En-tête personnalisé

Lorsque vous faites une demande, vous pouvez remplir l'en-tête et le corps de la demande avec des informations.

Pour demander en spécifiant l'en-tête dans la communication GET, procédez comme suit.

requests.get (url, headers = données d'en-tête de type dictionnaire)

Spécifiez ceci pour modifier et accéder à l '«agent utilisateur» comme information d'en-tête.

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 '}
res = requests.get(url, headers=headers)

Lorsque vous modifiez les paramètres de la communication GET et de la communication, spécifiez ce qui suit.

requests.get (url, params = données de paramètre de type dictionnaire)

params = {'key1': 'value1', 'key2': 'value2'}
res = requests.get(url, params=params)

Pour faire une demande en emballant les informations dans la partie du corps de la demande par communication POST, procédez comme suit.

`requests.get (url, data = données de corps de type dictionnaire)

payload = {'send': 'data'}
res = requests.post(url, data=payload)

Résumé

Soyons capables d'acquérir des informations en supprimant le mécanisme de communication nécessaire au grattage. Demain, nous commencerons à extraire les informations nécessaires des informations acquises dans cette suite.

29 jours avant de devenir ingénieur

Informations sur l'auteur

HP d'Otsu py: http://www.otupy.net/

Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter: https://twitter.com/otupython

Recommended Posts

Vous serez ingénieur dans 100 jours ――Jour 71 ――Programmation ――À propos du scraping 2
Vous serez ingénieur dans 100 jours ――Jour 74 ――Programmation ――À propos du scraping 5
Vous serez ingénieur dans 100 jours ――Jour 73 ――Programmation ――À propos du scraping 4
Vous serez ingénieur dans 100 jours ――Jour 75 ――Programmation ――À propos du scraping 6
Vous serez ingénieur dans 100 jours ――Jour 70 ――Programmation ――À propos du grattage
Vous serez ingénieur dans 100 jours ――Jour 61 ――Programmation ――A propos de l'exploration
Vous deviendrez ingénieur dans 100 jours --Jour 68 --Programmation --A propos de TF-IDF
Vous serez ingénieur dans 100 jours ――Jour 81 ――Programmation ――À propos de l'apprentissage automatique 6
Vous serez ingénieur dans 100 jours ――Jour 82 ――Programmation ――À propos de l'apprentissage automatique 7
Vous serez ingénieur dans 100 jours ――Jour 79 ――Programmation ――À propos de l'apprentissage automatique 4
Vous serez ingénieur dans 100 jours ――Jour 76 ――Programmation ――À propos de l'apprentissage automatique
Vous serez ingénieur dans 100 jours ―― Jour 80 ―― Programmation ―― À propos de l'apprentissage automatique 5
Vous serez ingénieur dans 100 jours ――Jour 78 ――Programmation ――À propos de l'apprentissage automatique 3
Vous serez ingénieur dans 100 jours ――Jour 84 ――Programmation ――À propos de l'apprentissage automatique 9
Vous serez ingénieur dans 100 jours ――Jour 83 ――Programmation ――À propos de l'apprentissage automatique 8
Vous serez ingénieur dans 100 jours ――Jour 77 ――Programmation ――À propos de l'apprentissage automatique 2
Vous serez ingénieur dans 100 jours ――Jour 85 ――Programmation ――À propos de l'apprentissage automatique 10
Vous serez ingénieur dans 100 jours ――Jour 63 ――Programmation ――À propos de la probabilité 1
Vous serez ingénieur dans 100 jours ――Jour 65 ――Programmation ――A propos de la probabilité 3
Vous serez ingénieur dans 100 jours ――Jour 64 ――Programmation ――À propos de la probabilité 2
Vous serez ingénieur dans 100 jours --Jour 86 --Base de données -
Vous serez ingénieur dans 100 jours ―― Jour 60 ―― Programmation ―― À propos de la structure des données et de l'algorithme de tri
Vous serez ingénieur dans 100 jours - Jour 27 - Python - Exercice Python 1
Vous serez ingénieur dans 100 jours - Jour 34 - Python - Exercice Python 3
Vous serez ingénieur dans 100 jours - Jour 31 - Python - Python Exercice 2
Vous devenez ingénieur en 100 jours ――Jour 67 ――Programmation ――A propos de l'analyse morphologique
Vous devenez ingénieur en 100 jours ――Jour 66 ――Programmation ――À propos du traitement du langage naturel
Vous serez ingénieur dans 100 jours ――Jour 24 ―― Python ―― Bases du langage Python 1
Vous serez ingénieur dans 100 jours ――Jour 30 ―― Python ―― Bases du langage Python 6
Vous serez ingénieur dans 100 jours ――Jour 25 ―― Python ―― Bases du langage Python 2
Vous serez ingénieur dans 100 jours - Jour 29 - Python - Bases du langage Python 5
Vous serez ingénieur dans 100 jours - Jour 33 - Python - Bases du langage Python 8
Vous serez ingénieur dans 100 jours --Jour 26 --Python --Basiques du langage Python 3
Vous devenez ingénieur en 100 jours - Jour 35 - Python - Ce que vous pouvez faire avec Python
Vous serez ingénieur dans 100 jours --Jour 32 --Python --Basiques du langage Python 7
Vous serez ingénieur dans 100 jours --Jour 28 --Python --Les bases du langage Python 4
Lorsqu'une erreur se produit dans le scraping python (requêtes)
Vous devez faire attention aux commandes que vous utilisez quotidiennement dans l'environnement de production.
Ce que les débutants pensent de la programmation en 2016