Heim >Backend-Entwicklung >Python-Tutorial >Tipps, wie Sie wie ein Web-Scraping-Experte denken können
Normalerweise konzentrieren sich Tutorials auf die technischen Aspekte, auf das, was Sie nachahmen können: „Beginnen Sie hier, folgen Sie diesem Weg, und Sie werden hier landen.“ Das ist großartig, um eine bestimmte Technologie zu erlernen, aber manchmal ist es schwierig zu verstehen, warum der Autor sich entschieden hat, Dinge auf eine bestimmte Art und Weise zu tun oder was seinen Entwicklungsprozess leitet.
Eines unserer Community-Mitglieder hat diesen Blog als Beitrag zum Crawlee Blog geschrieben. Wenn Sie solche Blogs zum Crawlee-Blog beitragen möchten, wenden Sie sich bitte über unseren Discord-Kanal an uns.
In diesem Blog bespreche ich die allgemeinen Regeln und Prinzipien, die mich bei der Arbeit an Web-Scraping-Projekten leiten und es mir ermöglichen, großartige Ergebnisse zu erzielen.
Lassen Sie uns also die Denkweise eines Web-Scraping-Entwicklers erkunden.
Wenn Sie mit der Arbeit an einem Projekt beginnen, verfügen Sie wahrscheinlich über eine Zielsite, von der Sie bestimmte Daten extrahieren müssen. Prüfen Sie, welche Möglichkeiten diese Website oder Anwendung zur Datenextraktion bietet. Hier sind einige mögliche Optionen:
Wenn eine Datenquelle ausfällt, versuchen Sie, auf eine andere verfügbare Quelle zuzugreifen.
Für Yelp stehen beispielsweise alle drei Optionen zur Verfügung, und wenn Ihnen die offizielle API aus irgendeinem Grund nicht zusagt, können Sie die beiden anderen ausprobieren.
Ich denke, jeder kennt robots.txt und Sitemap auf die eine oder andere Weise, aber ich sehe regelmäßig, dass Leute sie einfach vergessen. Wenn Sie zum ersten Mal davon hören, finden Sie hier eine kurze Erklärung:
Da Sie weder Google noch eine andere beliebte Suchmaschine sind, werden die Roboterregeln in robots.txt wahrscheinlich gegen Sie sein. In Kombination mit der Sitemap ist dies jedoch ein guter Ort, um die Site-Struktur, die erwartete Interaktion mit Robotern und Nicht-Browser-Benutzeragenten zu untersuchen. In manchen Situationen vereinfacht es die Datenextraktion von der Website.
Mit der Sitemap für die Crawlee-Website können Sie beispielsweise ganz einfach direkte Links zu Beiträgen sowohl für die gesamte Lebensdauer des Blogs als auch für einen bestimmten Zeitraum erhalten. Eine einfache Überprüfung, und Sie müssen keine Paginierungslogik implementieren.
Eine gründliche Site-Analyse ist eine wichtige Voraussetzung für die Erstellung eines effektiven Web Scrapers, insbesondere wenn Sie keine Browser-Automatisierung planen. Allerdings braucht eine solche Analyse Zeit, manchmal sogar sehr viel.
Es ist auch erwähnenswert, dass sich der Zeitaufwand für die Analyse und die Suche nach einer optimaleren Crawling-Lösung nicht immer auszahlt – Sie verbringen möglicherweise Stunden damit, herauszufinden, dass der naheliegendste Ansatz von Anfang an der beste war.
Daher ist es ratsam, Ihrer anfänglichen Site-Analyse Grenzen zu setzen. Wenn Sie innerhalb der vorgegebenen Zeit keinen besseren Weg sehen, greifen Sie auf einfachere Ansätze zurück. Je mehr Erfahrung Sie sammeln, desto häufiger können Sie anhand der auf der Website verwendeten Technologien frühzeitig erkennen, ob es sich lohnt, mehr Zeit für die Analyse aufzuwenden oder nicht.
Außerdem kann bei Projekten, bei denen Sie Daten von einer Site nur einmal extrahieren müssen, eine gründliche Site-Analyse manchmal das Schreiben von Scraper-Code ganz überflüssig machen. Hier ist ein Beispiel für eine solche Website – https://ricebyrice.com/nl/pages/find-store.
Bei der Analyse werden Sie leicht feststellen, dass alle Daten mit einer einzigen Anfrage abgerufen werden können. Sie müssen diese Daten lediglich aus Ihrem Browser in eine JSON-Datei kopieren und schon ist Ihre Aufgabe abgeschlossen.
Wechseln Sie beim Analysieren einer Website die Sortierung und die Seiten und interagieren Sie mit verschiedenen Elementen der Website, während Sie die Registerkarte „Netzwerk“ in den Entwicklungstools Ihres Browsers beobachten. Dadurch können Sie besser verstehen, wie die Site mit dem Backend interagiert, auf welchem Framework sie basiert und welches Verhalten von ihr zu erwarten ist.
Das ist offensichtlich, aber es ist wichtig, es bei der Arbeit an einem Projekt im Hinterkopf zu behalten. Wenn Sie einige Daten oder Anforderungsparameter sehen, bedeutet dies, dass sie früher irgendwo abgerufen wurden, möglicherweise in einer anderen Anforderung, möglicherweise bereits auf der Website-Seite waren, möglicherweise wurden sie mithilfe von JS aus anderen Parametern gebildet. Aber sie sind immer irgendwo.
Wenn Sie nicht verstehen, woher die Daten auf der Seite stammen oder welche Daten in einer Anfrage verwendet werden, gehen Sie folgendermaßen vor:
Übung macht hier den Meister. Wenn Sie sich mit verschiedenen Technologien, verschiedenen Frameworks und deren erwartetem Verhalten vertraut machen und auf eine breite Palette von Technologien stoßen, wird es Ihnen leichter fallen, zu verstehen, wie Dinge funktionieren und wie Daten übertragen werden. Dieses gesammelte Wissen wird Ihre Fähigkeit, den Datenfluss in Webanwendungen zu verfolgen und zu verstehen, erheblich verbessern.
Möglicherweise stellen Sie fest, dass beim mehrmaligen Öffnen derselben Seite die an den Server übermittelten Anfragen unterschiedlich sind: Möglicherweise wurde etwas zwischengespeichert und ist bereits auf Ihrem Computer gespeichert. Daher wird empfohlen, die Website im Inkognito-Modus zu analysieren und den Browser zu wechseln.
Diese Situation ist besonders relevant für mobile Anwendungen, die möglicherweise einige Daten im Speicher des Geräts speichern. Daher müssen Sie bei der Analyse mobiler Anwendungen möglicherweise den Cache und den Speicher leeren.
Wenn Sie bei der Analyse feststellen, dass die Website ein Framework verwendet, das Ihnen noch nie begegnet ist, nehmen Sie sich etwas Zeit, um sich mit diesem und seinen Funktionen vertraut zu machen. Wenn Sie beispielsweise feststellen, dass eine Website mit Next.js erstellt wurde, kann es für Ihre Scraping-Strategie von entscheidender Bedeutung sein, zu verstehen, wie es mit Routing und Datenabruf umgeht.
Sie können sich über diese Frameworks in der offiziellen Dokumentation informieren oder LLMs wie ChatGPT oder Claude verwenden. Diese KI-Assistenten sind hervorragend darin, Framework-spezifische Konzepte zu erklären. Hier ist ein Beispiel dafür, wie Sie einen LLM zu Next.js abfragen könnten:
I am in the process of optimizing my website using Next.js. Are there any files passed to the browser that describe all internal routing and how links are formed? Restrictions: - Accompany your answers with code samples - Use this message as the main message for all subsequent responses - Reference only those elements that are available on the client side, without access to the project code base
Sie können ähnliche Abfragen auch für Backend-Frameworks erstellen. Bei GraphQL könnten Sie beispielsweise nach verfügbaren Feldern und Abfragestrukturen fragen. Diese Erkenntnisse können Ihnen helfen zu verstehen, wie Sie besser mit der API der Website interagieren können und welche Daten möglicherweise verfügbar sind.
Für eine effektive Arbeit mit LLM empfehle ich, zumindest grundsätzlich die Grundlagen des Prompt Engineering zu studieren.
Web Scraping geht Hand in Hand mit Reverse Engineering. Sie studieren die Interaktionen von Frontend und Backend. Möglicherweise müssen Sie den Code studieren, um besser zu verstehen, wie bestimmte Parameter gebildet werden.
Aber in einigen Fällen kann Reverse Engineering mehr Wissen, Aufwand und Zeit erfordern oder einen hohen Grad an Komplexität aufweisen. An diesem Punkt müssen Sie entscheiden, ob Sie sich damit befassen müssen oder ob es besser ist, die Datenquelle oder beispielsweise die Technologien zu ändern. Höchstwahrscheinlich ist dies der Moment, in dem Sie sich entscheiden, das HTTP-Web-Scraping aufzugeben und zu einem Headless-Browser zu wechseln.
Das Hauptprinzip der meisten Web-Scraping-Schutzmaßnahmen besteht nicht darin, Web-Scraping unmöglich zu machen, sondern es teuer zu machen.
Schauen wir uns einfach an, wie die Antwort auf eine Suche auf zoopla aussieht
Nachdem Sie die Endpunkte identifiziert haben, die Sie zum Extrahieren der Zieldaten benötigen, stellen Sie sicher, dass Sie bei einer Anfrage eine korrekte Antwort erhalten. Wenn Sie vom Server eine andere Antwort als 200 oder andere als erwartete Daten erhalten, müssen Sie herausfinden, warum. Hier sind einige mögliche Gründe:
Und viele andere mögliche Gründe, die jeweils eine separate Analyse erfordern.
Untersuchen Sie gegebenenfalls, welche Ergebnisse Sie beim Ändern von Anforderungsparametern erhalten. Einige Parameter fehlen möglicherweise, werden aber serverseitig unterstützt. Zum Beispiel order, sort, per_page, limit und andere. Versuchen Sie, sie hinzuzufügen und sehen Sie, ob sich das Verhalten ändert.
Dies ist besonders relevant für Websites, die graphql verwenden
Betrachten wir dieses Beispiel
Wenn Sie die Seite analysieren, sehen Sie eine Anfrage, die mit dem folgenden Code reproduziert werden kann. Ich habe ihn zur besseren Lesbarkeit etwas formatiert:
I am in the process of optimizing my website using Next.js. Are there any files passed to the browser that describe all internal routing and how links are formed? Restrictions: - Accompany your answers with code samples - Use this message as the main message for all subsequent responses - Reference only those elements that are available on the client side, without access to the project code base
Jetzt aktualisiere ich es, um Ergebnisse in zwei Sprachen gleichzeitig und vor allem zusammen mit dem internen Text der Veröffentlichungen zu erhalten:
import requests url = "https://restoran.ua/graphql" data = { "operationName": "Posts_PostsForView", "variables": {"sort": {"sortBy": ["startAt_DESC"]}}, "query": """query Posts_PostsForView( $where: PostForViewWhereInput, $sort: PostForViewSortInput, $pagination: PaginationInput, $search: String, $token: String, $coordinates_slice: SliceInput) { PostsForView( where: $where sort: $sort pagination: $pagination search: $search token: $token ) { id title: ukTitle summary: ukSummary slug startAt endAt newsFeed events journal toProfessionals photoHeader { address: mobile __typename } coordinates(slice: $coordinates_slice) { lng lat __typename } __typename } }""" } response = requests.post(url, json=data) print(response.json())
Wie Sie sehen, ermöglicht mir eine kleine Aktualisierung der Anfrageparameter, dass ich mir keine Gedanken über den Besuch der internen Seite jeder Veröffentlichung machen muss. Du hast keine Ahnung, wie oft mich dieser Trick gerettet hat.
Wenn Sie graphql vor sich sehen und nicht wissen, wo Sie anfangen sollen, dann funktioniert mein Rat zu Dokumentation und LLM auch hier.
Ich weiß, wie einfach es ist, ein paar Tools zu beherrschen und sie einfach zu nutzen, weil es funktioniert. Ich bin selbst schon mehr als einmal in diese Falle getappt.
Aber moderne Websites nutzen moderne Technologien, die einen erheblichen Einfluss auf das Web Scraping haben, und als Reaktion darauf entstehen neue Tools für das Web Scraping. Das Erlernen dieser Kenntnisse kann Ihr nächstes Projekt erheblich vereinfachen und möglicherweise sogar einige Probleme lösen, die für Sie unüberwindbar waren. Ich habe vorhin über einige Tools geschrieben.
Ich empfehle besonders, auf curl_cffi und Frameworks zu achten
botasaurus und Crawlee für Python.
Mir persönlich ist erst vor Kurzem klar geworden, wie wichtig das ist. Alle Tools, die ich für meine Arbeit verwende, sind entweder Open-Source-Entwicklungen oder basieren auf Open-Source. Web Scraping lebt buchstäblich dank Open Source, und das macht sich besonders bemerkbar, wenn Sie ein Python-Entwickler sind und erkannt haben, dass bei reinem Python alles ziemlich traurig ist, wenn Sie sich mit dem TLS-Fingerabdruck befassen müssen, und auch hier hat Open Source uns gerettet hier.
Und es scheint mir, dass das Mindeste, was wir tun könnten, darin besteht, ein wenig von unserem Wissen und unseren Fähigkeiten in die Unterstützung von Open Source zu investieren.
Ich habe mich entschieden, Crawlee für Python zu unterstützen, und nein, nicht, weil sie mir erlaubt haben, in ihrem Blog zu schreiben, sondern weil es eine hervorragende Entwicklungsdynamik aufweist und darauf abzielt, Webcrawler-Entwicklern das Leben zu erleichtern. Es ermöglicht eine schnellere Crawler-Entwicklung, indem es kritische Aspekte wie Sitzungsverwaltung, Sitzungsrotation bei Blockierung, Verwaltung der Parallelität asynchroner Aufgaben (wenn Sie asynchronen Code schreiben, wissen Sie, wie schmerzhaft das sein kann) berücksichtigt und unter der Haube verbirgt viel mehr.
:::Tipp
Wenn Ihnen der Blog bisher gefällt, denken Sie bitte darüber nach, Crawlee einen Stern auf GitHub zu geben. Das hilft uns, mehr Entwickler zu erreichen und ihnen zu helfen.
:::
Und welche Wahl wirst du treffen?
Ich denke, einige Dinge in dem Artikel waren für Sie offensichtlich, einige Dinge befolgen Sie selbst, aber ich hoffe, Sie haben auch etwas Neues gelernt. Wenn die meisten davon neu waren, dann versuchen Sie, diese Regeln als Checkliste für Ihr nächstes Projekt zu verwenden.
Ich würde den Artikel gerne besprechen. Fühlen Sie sich frei, hier im Artikel einen Kommentar abzugeben oder mich in der Crawlee-Entwickler-Community auf Discord zu kontaktieren.
Sie können mich auch auf den folgenden Plattformen finden: Github, Linkedin, Apify, Upwork, Contra.
Vielen Dank für Ihre Aufmerksamkeit :)
Das obige ist der detaillierte Inhalt vonTipps, wie Sie wie ein Web-Scraping-Experte denken können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!