Cliquez ici jusqu'à hier
Vous deviendrez ingénieur dans 100 jours-70-Programmation-À propos du scraping
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-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.
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.
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.
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.
À 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. |
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'))
....
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)
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
HP d'Otsu py: http://www.otupy.net/
Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter: https://twitter.com/otupython
Recommended Posts