[PYTHON] [Version 2020] Entwicklungsverfahren für Personal Crawler und seine Vorsichtsmaßnahmen

Einführung

Der Zweck dieses Artikels ist es, allen zu helfen, die an der Automatisierung der Sammlung von Webinhalten interessiert sind, den idealen Crawler zu entwickeln. Zu diesem Zweck sind hier 12 Schritte zum Entwickeln eines Crawlers. Ein Crawler ist ein automatisiertes Programm, das Websites crawlt und Inhalte aufzeichnet und sammelt. Unter ihnen denke ich, dass der ideale Crawler einer ist, der den Gesetzen und der Ethik jeder Person entspricht und den Betrieb der Zielwebsite nicht beeinträchtigt. Einem nicht idealen Crawler wird der Zugriff von der Website verweigert oder er muss zu einem Fehlerbildschirm wechseln. Lassen Sie Ihren Computer die mühsame Arbeit erledigen, vermeiden Sie Probleme und verlängern Sie Ihre verfügbare Zeit.

■ Referenzseite (Python-Einführungsseite)

01. Der Zweck der Inhaltserfassung besteht darin, entweder "zwischen Einzelpersonen oder Familien zu verwenden", "einen Websuchdienst bereitzustellen" oder "Informationen zu analysieren".

Alle Webinhalte sind die Arbeit eines anderen. Daher unterliegt es dem Urheberrecht. Nach dem Urheberrecht dienen die folgenden Zwecke der freien Nutzung des Werkes.

■ Referenzseite

Insbesondere die beiden letztgenannten sind im 2018 Revised Copyright Act legaler geworden. Die Einschränkungen wurden ebenfalls geklärt. Überprüfen Sie daher die Details.

■ Referenzseite

Selbst für diese Zwecke sollten jedoch die folgenden Punkte gemeinsam beachtet werden.

02. Die Zielwebsite sollte legalen Inhalt enthalten.

Es ist verboten, illegal hochgeladene Inhalte herunterzuladen, während sie als illegal anerkannt werden. Überarbeitung des Urheberrechtsgesetzes (durchgesetzt am 1. Januar, 3. Jahr der Verordnung), die Art des Inhalts (z. B. Text, Bild , Audio, Video) spielt keine Rolle. Es wird dringend empfohlen, dass Sie auf Websites abzielen, für die der Autor die Bereitstellung des Inhalts zugestimmt hat.

■ Referenzseite

03. Befolgen Sie beim Targeting von Inhalten für Mitglieder einer Website die Nutzungsbedingungen dieser Website.

Wenn Sie den Nutzungsbedingungen zustimmen, um Mitglied der Website zu werden, müssen Sie diese Nutzungsbedingungen einhalten. Wenn ein Crawler in den Nutzungsbedingungen verboten ist, kann die Website nicht gecrawlt werden.

04. Wenn die Website dem Crawler Anweisungen gibt, befolgen Sie die Anweisungen.

Eine Website kann den Crawler anweisen, für die gesamte Website, für eine bestimmte Webseite oder für ein bestimmtes Bildschirmelement zu arbeiten. Es gibt die folgenden Anweisungen, und Sie müssen sie befolgen.

05. Es wird nicht empfohlen, die IP-Adresse der Verbindungsquelle im VPN oder Proxyserver auszublenden.

Die IP-Adresse der Verbindungsquelle wird auf der Website des Verbindungsziels aufgezeichnet und kann zur Sperrung oder Identifizierung des Zugriffs verwendet werden. Um dies zu vermeiden, können Sie VPN oder einen Proxyserver (einen Dienst, der einen Vermittler zwischen dem Verbindungsziel und der Verbindungsquelle platziert) verwenden, um die IP-Adresse der Verbindungsquelle auszublenden. (Um genau zu sein, wird die IP-Adresse des Vermittlers dem Verbindungsziel mitgeteilt.) Einige Websites blockieren jedoch möglicherweise den Zugriff von VPNs und Proxyservern. Da die gesamte Kommunikation einem Vermittler anvertraut wird, kann die Verwendung unzuverlässiger Dienste zu Informationslecks führen. Und da der Zugriff auf der Website-Seite nicht durch die IP-Adresse blockiert werden kann, besteht eine hohe Wahrscheinlichkeit, dass übergeordnete Maßnahmen ergriffen werden.

06. Verwenden Sie das automatische Betriebstool des Browsers "Selenium" als Crawler.

Von hier aus werden wir über die spezifische Crawler-Entwicklung sprechen. Viele Websites gehen von einer Javascript-Verarbeitung aus, bevor die Informationen angezeigt werden. Um die Informationen nach der Verarbeitung zu erhalten, lassen Sie sie vom Browser (genauer gesagt der Rendering-Engine) verarbeiten. Daher wird empfohlen, das automatische Betriebstool des Browsers "Selenium" als Crawler zu verwenden. Die folgende Site war sehr hilfreich für das Installationsverfahren und den grundlegenden Betrieb von Selen.

[Vollständige Version] Cheet Sheet, das den Browser mit Python und Selenium | Tanuhack automatisch betreibt (crawlt / kratzt)

Der Autor verwendet Firefox als Zielbrowser. Verwenden Sie jedoch alles, was Sie möchten, insbesondere Google Chrome oder Microsoft Edge. In diesem Artikel werden wir die Annahme von Firefox erläutern.

Firefox-Download-Seite

Firefox Web Driver Download-Seite

Es ist möglich, die Verarbeitung im Hintergrund durchzuführen (Einstellung ohne Kopf), es wird jedoch empfohlen, den Bildschirm am Anfang anzuzeigen. Manchmal schlägt es aufgrund eines Bildschirmübergangs fehl, und manchmal ist es nicht möglich, das angegebene Bildschirmelement abzurufen. Darüber hinaus kann es aufgrund der Erneuerung der Website erforderlich sein, diese vollständig zu renovieren.

Starten Sie Firefox


from selenium import webdriver
from selenium.webdriver.firefox.options import Options

#Einstellungsoptionen
options = Options()
#options.set_headless() #Wenn Sie den Bildschirm ausblenden möchten, kommentieren Sie.

#Starten Sie den Browser
driver = webdriver.Firefox(executable_path='Firefox WebDriver-Pfad (z.~/geckodriver)', options=options)

#Wartezeiteinstellung
driver.implicitly_wait(5) #Maximale Wartezeit für die Anzeige von Bildschirmelementen
driver.set_page_load_timeout(180) #Maximale Wartezeit bis zur Bildschirmanzeige

07. Zugriff mit dem Cookie des Ziel-Webdienstes.

Die meisten Webdienste geben ein Cookie an den Browser jedes Besuchers aus und verwenden dieses Cookie, um den Besucher zu verwalten. Und da die meisten Crawler beim ersten Besuch (ohne Cookies) darauf zugreifen, erhöht sich die Möglichkeit, als allgemeiner Benutzer behandelt zu werden, nur durch Cookies. Erstellen Sie ein neues Profil (Benutzerinformationen des Browsers) in Ihrem Browser und greifen Sie manuell auf die Zielwebsite zu.

Anschließend können Sie durch Angabe des Pfads des vorherigen Profils in Selenium den Crawler in den Status "Revisit" (mit Cookies) versetzen. Firefox-Profile werden in Ordnern am folgenden Speicherort gespeichert. Wenn mehrere Profile vorhanden sind, können Sie das neu erstellte anhand des Aktualisierungsdatums und der Aktualisierungszeit bestimmen. C: / Benutzer / Benutzername / AppData / Roaming / Mozilla / Firefox / Profile /

Profil festlegen


#Starten Sie den Browser
profiler = webdriver.FirefoxProfile('Firefox-Profilpfad (z.~/Firefox/Profiles/FOLDER-NAME)')
driver = webdriver.Firefox(executable_path='Firefox-Webtreiberpfad', options=options, firefox_profile=profiler)

08. Um zu einer anderen Seite auf derselben Site zu wechseln, schreiben Sie die URL des Hyperlinks neu und klicken Sie darauf.

Selenium verfügt über Befehle für Bildschirmübergänge und verwendet die folgenden Befehle beim Übergang zur Zielwebsite. Dieser Befehl entspricht der Eingabe der URL direkt in das URL-Feld des Browsers und dem Übergang zum Bildschirm.

Übergang zu einer anderen Site-Seite


driver.get('Beliebige URL')

Verwenden Sie zum Verschieben innerhalb derselben Site einen Befehl, der den normalen Vorgang des Klickens auf einen Hyperlink oder eine Schaltfläche nachahmt.

Übergang zu einer anderen Seite auf derselben Site


#Holen Sie sich einen Hyperlink
link = driver.find_element_by_css_selector('CSS-Auswahl')
#Klicken Sie auf das vorherige Element
link.click()

Möglicherweise möchten Sie jedoch zu einer beliebigen Seite wechseln, auch innerhalb derselben Site. (Bsp. Nach dem Erfassen des Inhalts vom Detailbildschirm von Produkt A wird der Link von Produkt B als zugehöriges Produkt dargestellt, und der Bildschirm wechselt zum Detailbildschirm von Produkt B) In diesem Fall schreiben Sie die URL des Übergangsziels mit einem Hyperlink oder einer Schaltfläche mit Javascript neu und wechseln Sie durch Klicken auf das Element.

Schreiben Sie die URL des Hyperlinks neu und wechseln Sie zu einer anderen Seite auf derselben Site


#Holen Sie sich einen Hyperlink
link = driver.find_element_by_css_selector('CSS-Auswahl')
#Scrollen Sie zu der Position, an der das vorherige Element auf dem Bildschirm angezeigt wird
driver.execute_script("arguments[0].scrollIntoView()", link)
#Schreiben Sie die Übergangsziel-URL des vorherigen Elements in eine beliebige um
driver.execute_script("arguments[0].setAttribute('href','{}')".format('Beliebige URL'), link)
#Klicken Sie auf das vorherige Element
link.click()

Dies dient dazu, unnatürliches Verhalten zu vermeiden, z. B. die Eingabe der URL direkt in das URL-Feld und den Übergang, obwohl sich der Übergang innerhalb derselben Site befindet. Technisch gesehen besteht der Zweck darin, einen Übergang durchzuführen, während ein Javascript-Klickereignis mit dem Referrer (Bildschirmübergangsquell-URL) desselben Domänensatzes ausgelöst wird.

09. Warten Sie nach dem Bildschirmübergang eine zufällige Sekunde.

Fügen Sie nach dem Bildschirmübergang einen Prozess hinzu, um auf eine zufällige Sekunde zu warten. Dies dient nicht nur dazu, die Belastung der Website zu verringern, sondern auch Probleme beim Bildschirmübergang zu vermeiden. Abhängig von der Wartezeit nach dem Bildschirmübergang gab es das Problem, dass der Bildschirmübergang nicht normal ausgeführt werden konnte, da er vor der Verarbeitung mit Javascript ausgeführt wurde. Ich denke, es ist eine gute Idee, diese Wartezeit je nach Website zu ändern.

Warten Sie auf zufällige Sekunden


from time import sleep
import random

def get_wait_secs():
  """Holen Sie sich Bildschirm warten Sekunden"""
  max_wait = 7.0   #Maximale Wartezeit
  min_wait = 3.0   #Minimale Wartezeit
  mean_wait = 5.0  #Durchschnittliche Wartezeit
  sigma_wait = 1.0 #Standardabweichung (Unschärfebreite)
  return min([max_wait, max([min_wait, round(random.normalvariate(mean_wait, sigma_wait))])])

sleep(get_wait_secs())

10. Fügen Sie beim Herunterladen der Datei den Benutzeragenten und den Verweis an die Anforderung an.

Beim Herunterladen von Dateien, insbesondere von Bilddateien, gelten möglicherweise die oben genannten Einschränkungen, um direkte Links und chaotische Downloads zu vermeiden. Im normalen Browserbetrieb werden der Benutzeragent (Informationen zum Betriebssystem der Verbindungsquelle, zum Browser usw.) und der Verweis (URL der Bildschirmübergangsquelle) automatisch festgelegt.

Bilddatei herunterladen


import requests
import shutil

img = driver.find_element_by_css_selector('CSS-Selektor zum Img-Tag')
src = img.get_attribute('src')
r = requests.get(src, stream=True, headers={'User-Agent':'User-Agent' , 'Referer':driver.current_url})
if r.status_code == 200:
  with open('Bildschirm speichern Zielpfad', 'wb') as f:
    r.raw.decode_content = True
    shutil.copyfileobj(r.raw, f)

11. Machen Sie die Startzeit des Crawlers unregelmäßig. Außerdem sollte die Startzeit auf einmal ungefähr mehrere Stunden betragen.

Sie können den Crawler manuell starten, aber Sie können ihn auch regelmäßig nach Vereinbarung starten. Die folgenden Tools werden je nach Betriebssystem standardmäßig bereitgestellt.

Wenn Sie jedoch genau zur gleichen Zeit weiterhin auf die Website zugreifen, konzentriert sich die Belastung der Website zu diesem Zeitpunkt. Es wird daher empfohlen, eine gewisse Schwankung der Zugriffszeit vorzubereiten. Eine Möglichkeit, dies zu tun, besteht darin, die Reservierung zu starten und sie dann für eine zufällige Zeit nach dem gleichen Verfahren wie in 08 zu stoppen.

Da der Zugriff für mehr als einige Stunden gleich ist, wird empfohlen, einen Prozess hinzuzufügen, um den Crawler zu stoppen, nachdem der Zugriff bis zu einem gewissen Grad fortgesetzt wurde.

12. Fügen Sie Ihrer Ethik Crawler-Betriebsregeln hinzu.

Wenn Sie außerdem eine Betriebsregel finden, die den Betrieb der Zielwebsite nicht beeinträchtigt, werden wir sie einführen. Vielen Dank für die Nutzung der Website.

(Stand 6. September 2020)

Recommended Posts

[Version 2020] Entwicklungsverfahren für Personal Crawler und seine Vorsichtsmaßnahmen
Installationsverfahren für Python und Ansible mit einer bestimmten Version
Vorsichtsmaßnahmen für den Umgang mit PNG- und JPG-Bildern
6 Python-Bibliotheken für schnellere Entwicklung und Debugging
Roadmap und Referenzmaterialien für das Selbststudium der Webentwicklung
Vorsichtsmaßnahmen für cv2.cvtcolor
Ich habe pipenv und asdf für die Python-Versionskontrolle ausprobiert
Persönliche Best Practices für die Python-Entwicklungsumgebung mit VS-Code