Klicken Sie hier bis gestern
Sie werden Ingenieur in 100 Tagen - Tag 70 - Programmieren - Über Scraping
Sie werden in 100 Tagen Ingenieur - Tag 63 - Programmierung - Über Wahrscheinlichkeit 1
Sie werden in 100 Tagen Ingenieur - Tag 59 - Programmierung - Über Algorithmen
Sie werden in 100 Tagen Ingenieur --- Tag 53 - Git - Über Git
Sie werden in 100 Tagen Ingenieur - Tag 42 - Cloud - Über Cloud-Dienste
Sie werden in 100 Tagen Ingenieur - Tag 36 - Datenbank - Über die Datenbank
Sie werden Ingenieur in 100-Tage-24-Python-Grundlagen der Python-Sprache 1
Sie werden in 100 Tagen Ingenieur - Tag 18 - JavaScript - Grundlagen von JavaScript 1
Sie werden in 100 Tagen Ingenieur - 14. Tag - CSS - CSS-Grundlagen 1
Sie werden in 100 Tagen Ingenieur - Tag 6 - HTML - HTML-Grundlagen 1
Diese Zeit ist eine Fortsetzung des Schabens.
Wir werden in der Python-Sprache kratzen. Da Schaben Kommunikation beinhaltet Sie müssen wissen, wie Kommunikation funktioniert.
Websites befinden sich auf Servern auf der ganzen Welt. Im WEB erfolgt die Kommunikation mit dem Server im Wesentlichen über das Protokoll (Kommunikationskonvention), das als HTTP (HyperText Transfer Protocol) bezeichnet wird.
Request
vom Browser an den Server
Die Antwort vom Server an den Browser wird als "Antwort" bezeichnet.
Grundlegende Austausche im WEB werden durch Anfrage / Antwort (R / R) hergestellt. Dies wird im Wesentlichen durch den Austausch von Textnachrichten erreicht
** Beispiel für eine Site-Suche **
Führen Sie eine Suche mit dem Suchwerkzeug über den Browser Request
durch
Der Server antwortet auf die Anfrage mit dem Ergebnis "Antwort"
Der Browser zeigt die Suchergebnisse basierend auf der Antwort an
Es gibt verschiedene Spezifikationen für die "HTTP-Kommunikation" und es gibt mehrere Möglichkeiten, Anforderungen zu senden.
** GET Kommunikation **
GET-Anforderungen durch Hinzufügen von Parametern zur URL
Beispiel:
http://otupy.com?p=abc&u=u123
Nach? Ist es ein Parameter, und der Parameter ist eine Kombination aus key = value
und &
.
** POST-Kommunikation **
POST ist im Body enthalten und wird angefordert
http://otupy.com
Text anfordern
param:p:ab,u:u123
** POST und GET richtig verwenden ** Die Kommunikation selbst erfolgt durch Auswahl einer geeigneten Kommunikationsmethode im Browser Das Programm muss die Kommunikationsmethode angeben.
Eine Anfrage von einem Browser an den Server einer Website wird als Anfrage bezeichnet.
Wenn Sie eine Webseite in Ihrem Browser öffnen, sendet der Browser eine Anforderungsnachricht an den Server, z.
Beispiel erhalten:
Header anfordern
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
POST-Beispiel:
Header anfordern:
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
Text anfordern:
name=hoge&comment=hoge
Die Anfrage hat einen "Header" - und einen "Body" -Teil, und welche Art von Informationen gepackt und gesendet werden, hängt von der Kommunikationsmethode ab.
Daher ist es erforderlich, die entsprechenden Informationen einzugeben und eine Anfrage zu stellen, wenn programmgesteuert darauf zugegriffen wird.
Lassen Sie uns sofort versuchen, zu kratzen.
In Python können Sie mit einer Bibliothek namens "Anfragen" kommunizieren.
import requests
Da die Zugriffsziel-Website erforderlich ist, geben Sie sie an und kommunizieren Sie mit "GET".
requests.get(URL)
url = 'http://www.otupy.net/'
res = requests.get(url)
print(res)
<Response [200]>
Als Ergebnis der Kommunikation wird eine "Antwort" zurückgegeben. Wenn die Kommunikation erfolgreich ist, können Sie die Informationen des Zugriffsziels abrufen.
Natürlich ist es Kommunikation, also kann es fehlschlagen.
Infolge der Kommunikation wird die "Antwort" in mehrere Statuscodes unterteilt. Die Kommunikation ist in den 200er Jahren erfolgreich, aber in den 400er und 500er Jahren Da die Kommunikation fehlgeschlagen ist, muss überprüft werden, ob die URL falsch eingegeben wurde oder ob auf den Remote-Server zugegriffen werden kann.
Einstufung | Nummer | Botschaft | Erläuterung |
---|---|---|---|
Information | 100 | Continue | Die Verarbeitung wird fortgesetzt. Bitte senden Sie eine weitere Anfrage. |
Information | 101 | Sitching Protocols | Wechseln Sie zu dem im Upgrade-Header angegebenen Protokoll und fordern Sie es erneut an. |
Erfolg | 200 | OK | Erfolgreich. |
Erfolg | 201 | Created | Der neue Inhalt wurde an dem im Header "Standort" angegebenen Speicherort erstellt. |
Erfolg | 202 | Accepted | Die Anfrage wurde angenommen. Der Vorgang ist jedoch noch nicht abgeschlossen. |
Erfolg | 203 | Non-Authoritative Information | Der Antwortheader unterscheidet sich von dem, was der ursprüngliche Server zurückgegeben hat, aber der Prozess ist erfolgreich. |
Erfolg | 204 | No Content | Es gibt keinen Inhalt, aber der Prozess war erfolgreich. |
Erfolg | 205 | Reset Content | Nachdem die Anfrage angenommen wurde, verwerfen Sie bitte den aktuellen Inhalt (Bildschirm). .. |
Erfolg | 206 | Partial Content | Nur ein Teil des Inhalts wird zurückgegeben. |
Transfer | 300 | Multiple Choices | Es gibt mehrere Möglichkeiten, wie Sie den Inhalt erhalten. |
Transfer | 301 | Moved Permanently | Sie sind an einen anderen Speicherort umgezogen, der in der Kopfzeile Standort angegeben ist. |
Transfer | 302 | Found | Gefunden an einem anderen Ort, der im Header "Ort" angegeben ist. Bitte schauen Sie dort. |
Transfer | 303 | See Other | Suchen Sie an anderer Stelle im Standort-Header. |
Transfer | 304 | Not Modified | Nicht aktualisiert. Wenn-Modified-Es wird zurückgegeben, wenn der Header Since verwendet wird. |
Transfer | 305 | Use Proxy | Verwenden Sie den im Location-Header angegebenen Proxy. |
Transfer | 306 | (Unused) | ungebraucht. |
Transfer | 307 | Temporary Redirect | Ich ziehe vorübergehend an einen anderen Ort. |
Client-Fehler | 400 | Bad Request | Die Anfrage ist ungültig. |
Client-Fehler | 401 | Unauthorized | Nicht berechtigt. |
Client-Fehler | 402 | Payment Required | Zahlung ist erforderlich. |
Client-Fehler | 403 | Forbidden | Zugriff ist nicht erlaubt. |
Client-Fehler | 404 | Not Found | Nicht gefunden. |
Client-Fehler | 405 | Method Not Allowed | Die angegebene Methode wird nicht unterstützt. |
Client-Fehler | 406 | Not Acceptable | Nicht erlaubt. |
Client-Fehler | 407 | Proxy Authentication Required | Eine Proxy-Authentifizierung ist erforderlich. |
Client-Fehler | 408 | Request Timeout | Die Anfrage ist abgelaufen. |
Client-Fehler | 409 | Conflict | Die Anfrage ist in Konflikt geraten. |
Client-Fehler | 410 | Gone | Der angeforderte Inhalt ist weg. |
Client-Fehler | 411 | Length Required | Content-Bitte fügen Sie einen Längenheader hinzu, um ihn anzufordern. |
Client-Fehler | 412 | Precondition Failed | If-...Erfüllte nicht die im Header angegebenen Bedingungen. |
Client-Fehler | 413 | Request Entity Too Large | Die angeforderte Entität ist zu groß. |
Client-Fehler | 414 | Request-URI Too Long | Die angeforderte URI ist zu lang. |
Client-Fehler | 415 | Unsupported Media Type | Nicht unterstützter Medientyp. |
Client-Fehler | 416 | Requested Range Not Satisfiable | Der angeforderte Bereich ist ungültig. |
Client-Fehler | 417 | Expectation Failed | Die im Expect-Header angegebene Erweiterungsanforderung ist fehlgeschlagen. |
Serverfehler | 500 | Internal Server Error | Auf dem Server ist ein unerwarteter Fehler aufgetreten. |
Serverfehler | 501 | Not Implemented | Nicht implementiert. |
Serverfehler | 502 | Bad Gateway | Das Gateway ist ungültig. |
Serverfehler | 503 | Service Unavailable | Service ist nicht verfügbar. |
Serverfehler | 504 | Gateway Timeout | Das Gateway hat eine Zeitüberschreitung. |
Serverfehler | 505 | HTTP Version Not Supported | Diese HTTP-Version wird nicht unterstützt. |
Lassen Sie uns nun das Kommunikationsergebnis programmgesteuert überprüfen.
Antwortvariable .status_code
Sie können den Statuscode unter überprüfen.
url = 'http://www.otupy.net/'
res = requests.get(url)
print(res.status_code)
200
Wenn es nicht 200 ist, ist die Kommunikation fehlgeschlagen und Informationen auf der Website können nicht abgerufen werden.
Wenn die Nummer 200 ist, ist die Kommunikation erfolgreich und Sie können die auf der Website erhaltenen Informationen sehen.
Da das Kommunikationsergebnis in einer Variablen gespeichert ist, können Sie verschiedene Inhalte sehen.
URL anfordern
Antwortvariable .url
Statuscode
Antwortvariable .status_code
Antworttext im Textformat abrufen
Antwortvariable .text
Antworttext im Binärformat abrufen
Antwortvariable .content
Plätzchen
Antwortvariable .cookies
Codierungsinformationen abrufen
Antwortvariable .encoding
Von hier an werden wir die erfassten Textinformationen verwenden, um sie in die erforderlichen Informationen zu trennen.
#Erhalten Sie die Antwort im Binärformat, konvertieren Sie sie in Zeichen und zeigen Sie sie an(1000 Zeichen)
print(res.content[0:1000].decode('utf-8'))
....
Wenn Sie eine Anfrage stellen, können Sie den Anforderungsheader und -text mit Informationen füllen.
Gehen Sie wie folgt vor, um durch Angabe des Headers in der GET-Kommunikation eine Anfrage zu stellen.
request.get (url, headers = Headerdaten vom Wörterbuchtyp)
Geben Sie dies an, um den "Benutzeragenten" als Header-Informationen zu ändern und darauf zuzugreifen.
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)
Geben Sie Folgendes an, wenn Sie die Parameter in der GET-Kommunikation und -Kommunikation ändern.
request.get (url, params = Parameterdaten des Wörterbuchtyps)
params = {'key1': 'value1', 'key2': 'value2'}
res = requests.get(url, params=params)
Gehen Sie wie folgt vor, um eine Anfrage zu stellen, indem Sie Informationen per POST-Kommunikation in den Anforderungskörperteil packen.
request.get (url, data = Körperdaten des Wörterbuchtyps)
payload = {'send': 'data'}
res = requests.post(url, data=payload)
Lassen Sie uns Informationen erhalten, indem Sie den für das Scraping erforderlichen Kommunikationsmechanismus unterdrücken. Morgen werden wir beginnen, die notwendigen Informationen aus den in dieser Fortsetzung erhaltenen Informationen zu extrahieren.
29 Tage bis Sie Ingenieur werden
HP von Otsu py: http://www.otupy.net/
Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter: https://twitter.com/otupython