Heim > Backend-Entwicklung > Python-Tutorial > Wie meldet sich Scrapy während des Crawling-Vorgangs automatisch an?

Wie meldet sich Scrapy während des Crawling-Vorgangs automatisch an?

王林
Freigeben: 2023-06-23 09:20:45
Original
1267 Leute haben es durchsucht

Wie meldet sich Scrapy während des Crawling-Vorgangs automatisch an?

Beim Crawlen von Website-Daten erfordern einige Websites eine Benutzeranmeldungsauthentifizierung, um bestimmte Seiten zu durchsuchen oder weitere Daten zu erhalten. Gleichzeitig verwenden Crawler-Ingenieure für einige Daten, die erst nach der Anmeldung abgerufen werden können, häufig automatisierte Vorgänge, um die Anmeldung bei der Website zu simulieren und Crawler-Daten zu sammeln. In diesem Artikel erfahren Sie, wie Sie die automatische Anmeldefunktion in Scrapy implementieren.

  1. Login-Spider erstellen

Erstellen Sie einen neuen Spider und nennen Sie ihn „login_spider“. Der Zweck dieser Spinne besteht darin, die simulierte Anmeldearbeit abzuschließen, dh die Anmeldearbeit des Benutzers abzuschließen, bevor der Crawler startet.

  1. Erstellen Sie ein Anmeldeformular

Suchen Sie das Formular auf der Anmeldeseite und sehen Sie sich den HTML-Code des Formulars an.
Suchen Sie die Felder, die ausgefüllt werden müssen (Namensattribut), wie „Benutzername“, „Passwort“ usw., und kopieren Sie sie.
Verwenden Sie die Selector-Methode, um die Eingabe-Tags zu finden, die diesen Feldern entsprechen, verwenden Sie die Methode extract(), um ihre Werte abzurufen, und weisen Sie sie den entsprechenden Schlüsselwerten zu.

    def parse(self,response):
        return scrapy.FormRequest.from_response(
            response,
            formdata={'username': 'your_username', 'password': 'your_password'},
            callback=self.start_scraping
        )
Nach dem Login kopieren
  1. Schreiben Sie eine Rückruffunktion, wenn die Login-Spinne zu laufen beginnt

Was die Login-Rückruffunktion hier tut, ist, den Cookie-Wert aus der Antwort mit dem Login-Token abzurufen, ein neues Request-Objekt zu erstellen und das Cookie (Header) zu übergeben. Wert, der späteren Business-Spidern zur Verfügung gestellt wird.

    def start_scraping(self, response):
        # Get CSRF token
        token = response.css('input[name="csrf_token"]::attr(value)').extract_first()
        logging.info('CSRF token obtained: ' + token)

        # Create cookie dict
        cookie = response.headers.getlist('Set-Cookie')
        cookie = [str(c, 'utf-8') for c in cookie]
        cookie_dict = {
            str(c.split('; ')[0].split('=')[0]): str(c.split('; ')[0].split('=')[1])
            for c in cookie
        }

        # Store cookie dict in spider settings
        self.settings.set('COOKIE_DICT', cookie_dict, priority='cmdline')

        # Start scraping main website
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie}
        )
Nach dem Login kopieren
  1. Verwenden Sie Cookies, um Anfragen mit Benutzerinformationen zu senden

Nachdem Sie sich beim Spider angemeldet haben, rufen Sie die Methode start_requests auf, um die erste Anfrage zu senden. Rufen Sie den im vorherigen Schritt gespeicherten Wert von cookie_dict aus den Einstellungen ab und übergeben Sie ihn mithilfe des Headers-Parameters an den Crawler.

    def start_requests(self):
        cookie = self.settings.get('COOKIE_DICT')
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie},
            meta={'login': True}
        )
Nach dem Login kopieren
  1. Erstellen Sie eine Business Spider

Verwenden Sie Cookie-Informationen, um nach der Anmeldung auf die eigentliche Zielseite zuzugreifen. Bei der Anpassung des Business Spiders wird über Cookie-Informationen auf alle beteiligten URLs zugegriffen, die Cookie-Informationen erhalten müssen. Das Folgende ist ein einfacher Business-Spider-Code

    class MySpider(scrapy.Spider):
    name = 'myspider'

    def start_requests(self):
        yield scrapy.Request('https://www.example.com/real-target-url/', callback=self.parse, headers={'Cookie': self.settings.get('COOKIE_DICT')})

    def parse(self, response):
        # Do whatever you want with the authenticated response
Nach dem Login kopieren

Durch die obigen Schritte können wir das Scrapy-Framework verwenden, um die simulierte Anmeldefunktion zu implementieren. Durch das Tragen des Cookie-Werts kann Scrapy weiterhin Daten erfassen, die eine Anmeldebestätigung erfordern, ohne sich abzumelden. Auch wenn hierbei Sicherheitsprobleme auftreten können, ist diese Lösung beim Erlernen von Crawlern und bei der Durchführung von Forschungsarbeiten für akademische Zwecke machbar.

Das obige ist der detaillierte Inhalt vonWie meldet sich Scrapy während des Crawling-Vorgangs automatisch an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage