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)
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.
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
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.
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.
Robots.txt …… Crawler-Patrouillenregel für jede Website (Textdatei) ⇒ Robots.txt Spezifikationen|Google Search-Entwicklerhandbuch| Google Developers
Roboter-Meta-Tags, Daten-Nosnippet, X-Robots-Tag …… Webseitenbasierte Patrouillenregeln (Schlüsselwörter in der Antwort) ⇒ Roboter-Metatag, Daten-Nosnippet, X-Robots-Tag-Spezifikationen | Google Search Developer Guide
rel-Attribut eines Tags …… Eine Patrouillenregel für jeden Hyperlink auf einer Webseite. (HTML-Tag-Attribute) ⇒ Informieren Sie Google über die Beziehung externer Links - Search Console Help
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.
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.
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 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
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)
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.
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())
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)
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.
Windows-Taskplaner [[Windows 10-kompatibel] Automatisieren Sie die regelmäßige Arbeit mit dem Taskplaner (1/2): Tech TIPS- @ IT](https://www.atmarkit.co.jp/ait/articles/1305/31/news049 .html)
MacOS/Linux - cron Cron-Konfigurationshandbuch
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.
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