Eigener Webcrawler mit Scrapy

Mit der Python Bibliothek Scrapy kann man relativ schnell einen eigenen Crawler aufsetzen – also ein Programm, das alle Seiten einer Website durchläuft. Dabei können dann bestimmte Aktionen durchgeführt werden.

Im Folgenden Beschreibe ich kurz, wie man unter Windows Scrapy als Crawler einsetzen kann.

Zunächst sollte man einige Einstellungen überprüfen bzw. vornehmen:

  • Die PATH Variable sollte auf das Python Installationsverzeichnis zeigen (also der Ordner in der die python.exe liegt)
  • Außerdem sollte das Unterverzeichnis Scripts im Python Ordner in der PATH Variable enthalten sein
  • Sollte man Verbindungen über einen Proxy herstellen müssen, legt man zwei Systemvariablen an: http_proxy und https_proxy. Jeweils mit der Proxy URL als Wert.
  • Scrapy braucht die Bibliothek pypiwin32. Also über pip intall pypiwin32 installieren
  • Dann über pip install scrapy Scrapy installieren.

Nun geht es los:

  • In Oberverzeichnis wechseln, in dem ein neues Scrapy Projekt angelegt werden soll.
  • In der Eingabeaufforderung scrapy startproject PROJEKTNAME. Projektname sollte man mit dem eigenen Projektnamen ersetzen
  • Wichtig: Nun in das neue Verzeichnis PROJEKTNAME wechseln. (cd PROJEKTNAME)
  • Im Unterordner PROJEKTNAME\ PROJEKTNAME\spiders eine neue Python-Datei anlegen. Man kann auch scrapy genspider PROJEKTNAME eingeben. Aber dann bekommt man einen Standardspider, den wir nicht wollen.
  • Was wir brauchen nennt sich im Scrapy Jargon CrawlSpider. Also ein Spider, der Links folgt und nicht nur eine Liste von URLs abarbeitet. Man findet Beschreibung und Beispiel hier: https://docs.scrapy.org/en/latest/topics/spiders.html#crawlspider

Wir schreiben also folgendes Python Programm:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class UlrischaSpider(CrawlSpider):
	//Wichtig: Dies ist der Name über den der Crawler in der Eingabeaufforderung gestartet wird
        name = 'ulrischa'
	allowed_domains = ['ulrischa.de']
	start_urls = ['https://www.ulrischa.de']
	//Damit wird jedem Link der erlaubten Domain gefolgt und die Funktion parse_item ausgeführt
	rules = (		
		Rule(LinkExtractor(), callback='parse_item', follow=True),
	)
	//Einfaches Beispiel, das den Inhalt des title-Element ausgiebt
	def parse_item(self, response):
		t = response.css('title::text').extract_first()
		print t+'\n'

Wichtig ist, dass man nicht die Standardmethode parse() überschreibt, sondern eine eigene definiert.

Nun ruft man das Programm in der Eingabeaufforderung folgendermaßen auf: scrapy crawl ulrischa. Dabei muss der Parameter nach crawl dem Wert des name Attributs aus der Klasse entsprechen.

Bitte verwendet für Tests eine Andere Domain als meine 🙂



2 Antworten zu "Eigener Webcrawler mit Scrapy"

  1. Tanja Lorenz sagt:

    Hallo,
    vielen Dank für deine sehr interessante Webseite.
    Ich möchte mit Python 3 Beautiful Soup bzw./und Scrapy die IP Adresse des Webservers einer Webadresse ermitteln. Wie mache ich das?
    Danke
    Tanja

    • u s sagt:

      Hallo Tanja, das hat nicht mit Scrapy oder Beautiful soup zu tun. Geht einfach über socket.
      import socket
      socket.gethostbyname(‘example.com’)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert