Heim >Backend-Entwicklung >Python-Tutorial >Tipps, wie Sie wie ein Web-Scraping-Experte denken können

Tipps, wie Sie wie ein Web-Scraping-Experte denken können

DDD
DDDOriginal
2024-11-05 11:29:02746Durchsuche

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.

Crawlee & Apify

Dies ist die offizielle Entwickler-Community von Apify und Crawlee. | 8987 Mitglieder

tips on how to think like a web scraping expert discord.com

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.

1. Auswählen einer Datenquelle für das Projekt

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:

  • Offizielle API – Die Website stellt möglicherweise eine kostenlose offizielle API bereit, über die Sie alle erforderlichen Daten erhalten können. Dies ist die beste Option für Sie. Sie können diesen Ansatz beispielsweise in Betracht ziehen, wenn Sie Daten aus Yelp extrahieren müssen
  • Website – in diesem Fall untersuchen wir die Website, ihre Struktur sowie die Art und Weise, wie Frontend und Backend interagieren
  • Mobile Anwendung – In einigen Fällen gibt es überhaupt keine Website oder API oder die mobile Anwendung stellt mehr Daten bereit. Vergessen Sie in diesem Fall nicht den Man-in-the-Middle-Ansatz

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.

2. Überprüfen Sie robots.txt und Sitemap

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:

  • Robots ist der etablierte Name für Crawler im SEO. Normalerweise bezieht sich dies auf Crawler großer Suchmaschinen wie Google und Bing oder auf Dienste wie Ahrefs und ChatGPT.
  • robots.txt ist eine Datei, die das zulässige Verhalten für Roboter beschreibt. Dazu gehören zulässige Crawler-Benutzeragenten, Wartezeiten zwischen Seitenscans, Muster von Seiten, deren Scan verboten ist, und mehr. Diese Regeln basieren typischerweise darauf, welche Seiten von Suchmaschinen indiziert werden sollen und welche nicht.
  • Sitemap beschreibt die Site-Struktur, um Robotern die Navigation zu erleichtern. Es hilft auch dabei, nur die Inhalte zu scannen, die aktualisiert werden müssen, ohne die Website unnötig zu belasten

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.

3. Vernachlässigen Sie die Standortanalyse nicht

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.

tips on how to think like a web scraping expert

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.

tips on how to think like a web scraping expert

4. Maximale Interaktivität

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.

5. Daten entstehen nicht aus dem Nichts

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:

  1. Überprüfen Sie nacheinander alle Anfragen, die die Website vor diesem Zeitpunkt gestellt hat.
  2. Untersuchen Sie ihre Antworten, Header und Cookies.
  3. Benutzen Sie Ihre Intuition: Könnte dieser Parameter ein Zeitstempel sein? Könnte es sich um einen anderen Parameter in modifizierter Form handeln?
  4. Ähnelt es Standard-Hashes oder -Kodierungen?

Ü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.

6. Daten werden zwischengespeichert

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.

7. Erfahren Sie mehr über das Framework

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.

8. Reverse Engineering

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

tips on how to think like a web scraping expert

9. Testen von Anfragen an Endpunkte

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:

  • Sie müssen einige Parameter übergeben, zum Beispiel Cookies oder bestimmte technische Header
  • Die Site erfordert, dass beim Zugriff auf diesen Endpunkt ein entsprechender Referrer-Header vorhanden ist
  • Die Site geht davon aus, dass die Header einer bestimmten Reihenfolge folgen. Ich bin nur ein paar Mal darauf gestoßen, aber ich habe es erlebt
  • Die Website nutzt einen Schutz gegen Web Scraping, beispielsweise mit TLS-Fingerabdruck

Und viele andere mögliche Gründe, die jeweils eine separate Analyse erfordern.

10. Experimentieren Sie mit Anforderungsparametern

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.

11. Haben Sie keine Angst vor neuen Technologien

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.

12. Helfen Sie Open-Source-Bibliotheken

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?

Abschluss

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn