GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So erstellen Sie Webspider mit Scrapy

Scrapy ist ein in Python entwickeltes Open-Source-Framework, mit dem Sie Webspider oder Crawler erstellen können, um schnell und einfach Informationen von Websites zu extrahieren.

Diese Anleitung zeigt, wie Sie mit Scrapy einen Webspider auf Ihrem Server erstellen und ausführen, um mithilfe verschiedener Techniken Informationen von Webseiten zu extrahieren.

Verbinden Sie sich zunächst über eine SSH-Verbindung mit Ihrem Server. Wenn Sie dies noch nicht getan haben, wird empfohlen, unseren Leitfaden zu befolgen, um sich sicher mit SSH zu verbinden. Im Falle eines lokalen Servers gehen Sie zum nächsten Schritt und öffnen Sie das Terminal Ihres Servers.

Virtuelle Umgebung erstellen

Bevor Sie mit der eigentlichen Installation beginnen, fahren Sie mit der Aktualisierung der Systempakete fort:

$ sudo apt-get update

Fahren Sie fort, indem Sie einige für den Betrieb notwendige Abhängigkeiten installieren:

$ sudo apt-get install python-dev python-pip libxml2-dev zlib1g-dev libxslt1-dev libffi-dev libssl-dev

Sobald die Installation abgeschlossen ist, können Sie mit der Konfiguration von virtualenv beginnen, einem Python-Paket, mit dem Sie Python-Pakete isoliert installieren können, ohne andere Software zu gefährden. Obwohl dieser Schritt optional ist, wird er von Scrapy-Entwicklern dringend empfohlen:

$ sudo pip install virtualenv

Bereiten Sie dann ein Verzeichnis vor, um die Scrapy-Umgebung zu installieren:

$ sudo mkdir /var/scrapy
$ cd /var/scrapy

Und initialisieren Sie eine virtuelle Umgebung:

$ sudo virtualenv /var/scrapy

New python executable in /var/scrapy/bin/python

Installing setuptools, pip, wheel...

done.

Um die virtuelle Umgebung zu aktivieren, führen Sie einfach den folgenden Befehl aus:

$ sudo source /var/scrapy/bin/activate

Sie können jederzeit durch den Befehl "deaktivieren" beenden.

Installation von Scrapy

Installieren Sie jetzt Scrapy und erstellen Sie ein neues Projekt:

$ sudo pip install Scrapy
$ sudo scrapy startproject example
$ cd example

Im neu angelegten Projektverzeichnis hat die Datei folgende Struktur :

example/

scrapy.cfg       # configuration file

example/        # module of python project

__init__.py

items.py      

middlewares.py   

pipelines.py    
    
settings.py     # project settings

spiders/     

__init__.py

Verwendung der Shell zu Testzwecken

Scrapy ermöglicht es Ihnen, den HTML-Inhalt von Webseiten herunterzuladen und Informationen daraus durch die Verwendung verschiedener Techniken, wie z. B. CSS-Selektoren, zu extrapolieren. Um diesen Prozess zu erleichtern, stellt Scrapy eine "Hülle" bereit, um die Informationsextraktion in Echtzeit zu testen.

In diesem Tutorial erfahren Sie, wie Sie den ersten Beitrag auf der Hauptseite des berühmten sozialen Reddit erfassen:

Bevor Sie mit dem Schreiben der Quelle fortfahren, versuchen Sie, den Titel durch die Shell zu extrahieren:

$ sudo scrapy shell "reddit.com"

Innerhalb weniger Sekunden hat Scrapy die Hauptseite heruntergeladen. Geben Sie also Befehle mit dem Objekt „Antwort“ ein. Verwenden Sie wie im folgenden Beispiel den Selektor "article h3 ::text":, um den Titel des ersten Posts zu erhalten

>>> response.css('article h3::text')[0].get()

Wenn der Selektor richtig funktioniert, wird der Titel angezeigt. Verlassen Sie dann die Shell:

>>> exit()

Um einen neuen Spider zu erstellen, erstellen Sie eine neue Python-Datei im Projektverzeichnis example /spiders/reddit.py:

import scrapy
                

class RedditSpider(scrapy.Spider):

name = "reddit"
                

def start_requests(self):

yield scrapy.Request(url="https://www.reddit.com/", callback=self.parseHome)
                

def parseHome(self, response):

headline = response.css('article h3::text')[0].get()
                

with open( 'popular.list', 'ab' ) as popular_file:

popular_file.write( headline + "\n" )

Alle Spider erben die Spider-Klasse des Scrapy-Moduls und starten die Anfragen mit der Methode start_requests:

yield scrapy.Request(url="https://www.reddit.com/", callback=self.parseHome)

Wenn Scrapy das Laden der Seite abgeschlossen hat, ruft es die Callback-Funktion (self.parseHome) auf.

Mit dem Response-Objekt kann der Inhalt Ihres Interesses übernommen werden:

headline = response.css('article h3::text')[0].get()

Und speichern Sie es zu Demonstrationszwecken in einer "popular.list"-Datei.

Starte den neu erstellten Spider mit dem Befehl:

$ sudo scrapy crawl reddit

Nach Abschluss wird der letzte extrahierte Titel in der Datei popular.list gefunden:

$ cat popular.list

Scrapyd planen

Um die Ausführung Ihrer Spider zu planen, nutzen Sie den von Scrapy angebotenen Dienst „Scrapy Cloud“ (siehe https://scrapinghub.com/scrapy-cloud ) oder installieren Sie den Open-Source-Daemon direkt auf Ihrem Server .

Stellen Sie sicher, dass Sie sich in der zuvor erstellten virtuellen Umgebung befinden und installieren Sie das scrapyd-Paket über pip:

$ cd /var/scrapy/

$ sudo source /var/scrapy/bin/activate

$ sudo pip install scrapyd

Sobald die Installation abgeschlossen ist, bereiten Sie einen Dienst vor, indem Sie die Datei /etc/systemd/system/scrapyd.service mit folgendem Inhalt erstellen:

[Unit]

Description=Scrapy Daemon

[Service]

ExecStart=/var/scrapy/bin/scrapyd

Speichern Sie die neu erstellte Datei und starten Sie den Dienst über:

$ sudo systemctl start scrapyd

Jetzt ist der Daemon konfiguriert und bereit, neue Spinnen zu akzeptieren.

Um Ihre Beispiel-Spider bereitzustellen, müssen Sie ein Tool namens „scrapyd-client“ verwenden, das von Scrapy bereitgestellt wird. Fahren Sie mit der Installation über pip fort:

$ sudo pip install scrapyd-client

Fahren Sie fort, indem Sie die Datei scrapy.cfg bearbeiten und die Bereitstellungsdaten festlegen:

[settings]

default = example.settings
    
[deploy]

url = http://localhost:6800/

project = example

Stellen Sie jetzt bereit, indem Sie einfach den folgenden Befehl ausführen:

$ sudo scrapyd-deploy

Um die Spider-Ausführung zu planen, rufen Sie einfach die Scrapyd-API auf:

$ sudo curl http://localhost:6800/schedule.json -d project=example -d spider=reddit

Linux
  1. So erstellen Sie eine Datenbank in MySQL mit MySQL Workbench

  2. Wie erstelle ich mit Virsh eine VM von Grund auf neu?

  3. Wie erstelle ich einen neuen Benutzer mit SSH-Zugriff?

  4. So erstellen Sie eine Website mit SitePad

  5. Wie erstelle ich eine Datei mit einer bestimmten Größe in Linux?

So erstellen Sie Proxmox-Container über das Proxmox-Web-UI-Dashboard

So erstellen Sie eine Volumengruppe in Linux mit LVM

So erstellen Sie Dokumente mit Bash-Skripten

So installieren Sie Calibre Web auf Ubuntu 20.04 mit Docker

So erstellen Sie eine Web-App mit Node.js auf Jelastic Cloud

So erstellen Sie einen E-Commerce mit Magento