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?
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.
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.
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 )
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} )
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} )
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
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!