Wie man unendlich scrollende Seiten mit Python scrapen kann

Anleitungen, Python, Scraping, Nov-15-20225 Min. gelesen

In der heutigen Welt macht jeder von den neuen Technologien Gebrauch. Mit Hilfe von Web Scraping können Sie auf automatisierte Weise Zugang zu strukturierten Daten erhalten. Zum Beispiel können Sie Web Scraping für verwenden: Infinite Scrolling, auch bekannt als endloses Scrollen, ist eine Webdesign-Technik, die Websites oft mit AJAX oder Javascript verwenden

Inhaltsübersicht

In der heutigen Welt macht jeder von den neuen Technologien Gebrauch. Mit Hilfe von Web Scraping können Sie auf automatisierte Weise Zugang zu strukturierten Daten erhalten. Zum Beispiel können Sie Web Scraping für:

  • Preisüberwachung
  • Generierung von Leads
  • Überwachung der Nachrichten
  • Marktforschung
  • Preis Intelligenz

Unendliches Scrollen, auch bekannt als endloses Scrollen, ist eine Webdesign-Technik, die Websites oft mit AJAX oder Javascript verwenden, um zusätzliche Inhalte dynamisch zu laden, wenn der Benutzer bis zum unteren Ende der Webseite scrollt. Diese Technik wurde durch ihren Erfolg auf Social-Media-Seiten populär. So wird beispielsweise das unendliche Scrollen bei Twitter durch asynchrones Laden erzeugt. Twitter führt AJAX-Aufrufe durch, nachdem die Seite geladen wurde, um beim Scrollen kontinuierlich neue Inhalte hinzuzufügen. Obwohl das unendliche Scrollen viele Vorteile hat, ist es für zielgerichtete Suchaufgaben, bei denen bestimmte Inhalte gefunden werden müssen, nicht zu empfehlen.

Lassen Sie uns zunächst die Vorteile des Scannens von Seiten mit unendlichem Scrolling verstehen.

Warum müssen Sie unendlich scrollende Seiten scrapen?

Im Folgenden sind einige der Gründe für das Scrapen von Seiten mit unendlichem Scrolling aufgeführt.

  • Benutzerbindung - Unendliches Scrollen hält die Benutzer auf einer Seite beschäftigt. Auf Social-Media-Seiten wie Twitter und Facebook gibt es tonnenweise nutzergenerierte Inhalte, durch die man scrollen kann, so dass der Nutzer ständig beschäftigt ist. 
  • Weniger Klicks - Scrollen erfordert weniger Aktionen und ist für die Nutzer einfacher als Klicken.
  • Ideal für Mobilgeräte - Unendliches Scrollen ist ideal für Mobilgeräte und Touchscreens. Nutzer können nach unten wischen, um neue Inhalte zu generieren, anstatt zu neuen Registerkarten zu wechseln. 

Abgesehen von den oben genannten Vorteilen des Scannens von Seiten mit unendlichem Scrolling gibt es auch einige Nachteile wie:

  • Es ist nicht gut für die Suchmaschinenoptimierung (SEO).
  • Für Benutzer mit körperlichen Behinderungen ist es nicht einfach, durch die Seiten zu navigieren, die einen unendlichen Bildlauf haben.
  • Bei Websites mit unendlichem Bildlauf kann es zu langen Ladezeiten kommen, die sowohl vom Benutzer als auch von der Entwicklungsseite verursacht werden können.

Wie man unendlich scrollende Seiten mit Python scrapen kann

Sehen wir uns an, wie man mit Python unendlich scrollende Seiten mit Hilfe der unten aufgeführten Schritte scrapen kann.

Bibliotheken importieren

Sie müssen die Selenium-Bibliothek importieren.

from selenium import webdriver
von selenium.webdriver.common.keys importieren Schlüssel          
importieren Zeit

Selenium-Einrichtung

Hier müssen Sie den Browser auswählen, den Sie verwenden möchten. Wir werden uns für Chrome entscheiden, da er mehr Möglichkeiten bietet als Firefox. 

def get_selenium():                          
  options = webdriver.ChromeOptions()
  options.add_argument('--ignore-certificate-errors')
  options.add_argument('--incognito')
  options.add_argument('headless')                       
   driver = webdriver.Chrome(chrome_options=options)
  return (Treiber)

Das oben erwähnte Headless-Argument ist ziemlich wichtig. Selenium öffnet Chrome nicht in einem neuen Fenster, wenn es headless in Python läuft. Wenn Sie jedoch beim Scraping auf ein Problem stoßen, können Sie die headless-Option kommentieren und sehen, was in Chrome vor sich geht und was auf der Seite geladen wird.

Wir können die beiden Flaggen ignore-certificate-errors und incognito weglassen.

Wenn Sie auf ein Captcha oder ein Cookie-Banner stoßen, das das Laden Ihrer Seite verhindert, können Sie auf OK klicken und normal mit der Seite fortfahren. Wenn der Browser jedoch unerwartet geschlossen wird, können Sie time.sleep() verwenden, um den Code anzuhalten und sich ausreichend Zeit für die Fehlersuche zu nehmen.

Behebung des unendlichen Bildlaufs

Sie müssen sich die HTML-Struktur Ihrer Seite ansehen, um das unendliche Scrollen zu beheben, und die unten aufgeführten Schritte ausführen.

  • Sie müssen das letzte Element finden, das auf die Seite geladen wurde.
  • Sie müssen Selenium verwenden, um zu diesem Element hinunterzublättern.
  • Um zu warten, bis die Seite weitere Inhalte geladen hat, verwenden Sie time.sleep().
  • Blättern Sie erneut bis zum letzten Element, das auf die Seite geladen wurde.
  • Sie müssen den gleichen Vorgang wiederholen, bis Sie das Ende der Seite erreicht haben.

Zum besseren Verständnis können Sie das folgende Beispiel heranziehen.

selenium = get_selenium()              
selenium.get("ihre/url")   
last_elem = '';
while True:
   current_last_elem = "#my-div > ul > li:last-child"
   scroll = "document.querySelector(\'" + current_last_elem + "\').scrollIntoView();"
   selenium.execute_script(scroll)
   time.sleep(3)
  if (letztes_elem == aktuelles_elem)
     break
  sonst
      letztes_elem = aktuelles_elem

Im obigen Code haben wir jQuery und Javascript in Python verwendet. 

Hier,

  • Wir haben die Funktion selenium.get() verwendet, die unsere URL-Seite öffnet. Wenn Sie jedoch ein Schlüsselwort zu Ihrer URL-Suche hinzufügen möchten, können Sie die folgende Codezeile verwenden.
selenium.get("ihre/url.com/{0}".format(keyword))
  • Wir haben last_time auf 0 initialisiert, indem wir einen leeren String darin gespeichert haben.
  • Wir haben eine while-Schleife verwendet, in der wir CSS_selector oder Xpath benutzt haben, um das current_last_elem zu erhalten. Um den Pfad zu ermitteln, führen Sie die folgenden Schritte aus. Um ein Element auszuwählen, für das Sie den Pfad benötigen, müssen Sie die Webdev-Tools verwenden. Sie können diese Anleitung befolgen, um das Element in der HTML-Struktur der Seite auszuwählen und den Xpath in Chrome zu erhalten.
  • Öffnen Sie Ihre Seite.
  • Um ein Element auszuwählen, für das Sie den Pfad benötigen, müssen Sie Webdev-Tools verwenden. Sie können diesem Tutorial folgen, um das Element in der HTML-Struktur der Seite auszuwählen und den Xpath in Chrome zu erhalten.
  • Um die Seite bis zum ausgewählten Element zu scrollen, haben wir jQuery und scrollIntoView() verwendet. 
"document.querySelector(\'" + .. + "\').scrollIntoView();"

Hier sollte Ihr Format korrekt sein, d. h. Sie müssen auf die einfachen und doppelten Anführungszeichen und die Escape-Zeichen achten.

  • Wir führen das js-Skript mit selenium.execute_script() aus.
  • Sie müssen der Seite genügend Zeit zum Laden geben, damit sie das letzte Element finden kann. Daher ist die Funktion time.sleep() wichtig, da sie die Ausführung für einige Sekunden aussetzt. Wenn Sie der Seite nicht genügend Zeit zum Laden geben, wird der Bildlauf gestoppt, und Sie erhalten ein undefiniertes Ergebnis.
  • Jedes Mal, wenn wir zum unteren Ende der Seite blättern, prüfen wir, ob ein neues letztes Element gefunden wurde. Wenn es gefunden wird, bedeutet dies, dass wir das Ende der Seite noch nicht erreicht haben und weiter blättern müssen. Wenn es nicht gefunden wird, bedeutet dies, dass die Seite zu Ende gescrollt wurde, und wir können die Schleife verlassen.

Häufige Probleme beheben

Einige der häufig auftretenden Probleme beim unendlichen Scrollen sind folgende:

  • Es dauert einige Zeit, den richtigen Xpath zum letzten Element zu finden. Sie müssen die einfachen und doppelten Anführungszeichen im js-Skript überprüfen.
  • Wenn Sie undefinierte oder das gleiche letzte Element jedes Mal erhalten, müssen Sie die Zeitdauer erhöhen, d.h. time.sleep() erhöhen, da die Seite möglicherweise nicht genug Zeit hat, um vollständig zu laden. 
  • Sie können die Option headless in get_selenium() auskommentieren, wenn alles korrekt ist, aber es funktioniert trotzdem nicht.

Auslösen von js in Python

Es ist möglich, ein js-Skript aus Python heraus auszulösen und eine Liste als Ergebnis zu erhalten. 

Mit dem folgenden Code können wir zum Beispiel die Quellen aller Bilder auf der Seite abrufen.

js_script = '''\    
var jslist = []  
document.querySelectorAll('img').forEach(i => jslist.push(i.src));
return jslist; 
 '' '   
python_list = selenium.execute_script(js_script)

Im obigen Code,

  • Wir haben ein leeres Array namens jslist erstellt.
  • Wir haben alle img-Tags auf der Seite ausgewählt.
  • Wir haben forEach für das Schieben jedes img.src in unserem Array verwendet.
  • Wir haben die jslist zurückgegeben.

Wir können den gleichen Ansatz für die href-Links verwenden, indem:

  • Auswählen aller "a"-Tags.
  • Wir schieben jede a.href in unser Array.

Anschließend können wir das Skript mit selenium.execute_script() ausführen und den zurückgegebenen Wert in einer Python-Variablen (z.B. python_list) speichern. 

So können wir mit Python unendlich scrollende Seiten scrapen.

Verwendung eines Proxys

Sie wissen, dass ein Proxy ein Drittanbieter-Server ist, der als Vermittler zwischen einem Client, der eine Ressource anfordert, und einem Server, der diese Ressource bereitstellt, fungiert. Wenn Sie Proxys mit Selenium und Python verwenden möchten, können Sie die folgenden Codezeilen verwenden.

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s'% hostname +": "+port)
driver = webdriver.Chrome(chrome_options=chrome_options)

Für die Handhabung des unendlichen Scrollens können Sie scroll-proxy verwenden, das das programmatische Scrollen der scrollbaren Ansichten innerhalb einer Ansichtshierarchie unterstützt. Wenn Sie npm verwenden, können Sie scroll-proxy mit dem unten stehenden Befehl installieren. Wir werden js verwenden, um die Verwendung von scroll-proxy zu demonstrieren.

npm install scroll-proxy--save

Nach der Installation von scroll-proxy können Sie ein ScrollProxy-Objekt mit dem folgenden Code instanziieren.

var myScroll = new ScrollProxy();

Wie Sie sehen können, haben wir dem ScrollProxy-Konstruktor keine Argumente übergeben, da er standardmäßig Aktionen meldet, wenn der Benutzer die Seite scrollt.

Wenn Sie jedoch Aktualisierungen erhalten möchten, wenn der Benutzer innerhalb eines bestimmten HTML-Elements blättert, müssen Sie dieses Element an den Konstruktor übergeben.

var myDiv = document.querySelector('.scrollable');
var myDivScroll = new ScrollProxy(myDiv);

Warum Proxies für Scraping Infinite Scrolling verwenden?

Im Folgenden finden Sie einige Gründe für die Verwendung von Proxys beim Scannen von Infinite Scrolling.

  • Ein Captcha kann zu einer Zeitüberschreitung auf Ihrer Seite führen und Ihren Scraper blockieren. Sie können die Seite manuell auf ein Captcha überprüfen, wenn Sie häufig Timeout-Fehler erhalten. Die meisten Captchas werden durch Sicherheitsmaßnahmen ausgelöst, und Sie können sie vermeiden, indem Sie zusammen mit Ihrem Scraper rotierende Wohn-Proxys verwenden.
  • Einige Websites ziehen es vor, verdächtige Header-Anfragen herauszufiltern, weil sie davon ausgehen, dass es sich bei dem User-Agent um einen Bot handeln könnte. Um zu vermeiden, dass Sie signalisieren, dass Sie ein Bot sind, können Sie Proxys verwenden, die Ihre IP-Adresse ändern und die roten Flaggen für Sie verhindern (User-Agent). 

Schlussfolgerung

Wir haben besprochen, dass das unendliche Scrollen bevorzugt wird, wenn der Nutzer nicht nach bestimmten Informationen sucht. Nachrichten-Websites und Social-Media-Feeds, die ständig neue Inhalte generieren, können vom unendlichen Scrollen profitieren. Andererseits sind Geschäftsseiten und E-Commerce-Websites keine guten Kandidaten für unendliches Scrollen, da die Nutzer nach bestimmten Informationen suchen. Außerdem haben wir die Schritte für das Scraping von Seiten mit unendlichem Scrolling mit Selenium besprochen. Wir können auch rotierende Wohn-Proxys für die Handhabung des unendlichen Scrollens verwenden, da sie helfen, Captchas zu vermeiden und unsere verdächtigen Header-Anfragen zu filtern.

Ich hoffe, Sie haben verstanden, wie man mit Python unendlich scrollende Seiten scrapen kann.