GNU/Linux >> Linux Esercitazione >  >> Linux

Come creare ragni web con Scrapy

Scrapy è un framework open source sviluppato in Python che permette di creare web spider o crawler per estrarre informazioni dai siti web in modo semplice e veloce.

Questa guida mostra come creare ed eseguire uno spider web con Scrapy sul tuo server per estrarre informazioni dalle pagine web attraverso l'uso di diverse tecniche.

Per prima cosa, connettiti al tuo server tramite una connessione SSH. Se non l'hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in modo sicuro con SSH. Nel caso di un server locale, vai al passaggio successivo e apri il terminale del tuo server.

Creazione dell'ambiente virtuale

Prima di avviare l'installazione vera e propria, procedere con l'aggiornamento dei pacchetti di sistema:

$ sudo apt-get update

Continua installando alcune dipendenze necessarie per il funzionamento:

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

Una volta completata l'installazione, puoi iniziare a configurare virtualenv, un pacchetto Python che permette di installare i pacchetti Python in modo isolato, senza compromettere altri software. Sebbene sia facoltativo, questo passaggio è altamente raccomandato dagli sviluppatori di Scrapy:

$ sudo pip install virtualenv

Quindi, prepara una directory per installare l'ambiente Scrapy:

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

E inizializzare un ambiente virtuale:

$ sudo virtualenv /var/scrapy

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

Installing setuptools, pip, wheel...

done.

Per attivare l'ambiente virtuale, basta eseguire il seguente comando:

$ sudo source /var/scrapy/bin/activate

Puoi uscire in qualsiasi momento tramite il comando "disattiva".

Installazione di Scrapy

Ora installa Scrapy e crea un nuovo progetto:

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

Nella directory del progetto appena creata, il file avrà la seguente struttura:

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

Utilizzo della shell a scopo di test

Scrapy permette di scaricare il contenuto HTML delle pagine web ed estrapolare informazioni da esse attraverso l'uso di diverse tecniche, come i selettori css. Per facilitare questo processo, Scrapy fornisce una "shell" per testare l'estrazione delle informazioni in tempo reale.

In questo tutorial, vedrai come catturare il primo post sulla pagina principale del famoso social Reddit:

Prima di passare alla scrittura del sorgente, prova ad estrarre il titolo tramite la shell:

$ sudo scrapy shell "reddit.com"

Entro pochi secondi, Scrapy avrà scaricato la pagina principale. Quindi, inserisci i comandi usando l'oggetto "risposta". Come, nell'esempio seguente, usa il selettore "articolo h3 ::testo":, per ottenere il titolo del primo post

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

Se il selettore funziona correttamente, verrà visualizzato il titolo. Quindi, esci dalla shell:

>>> exit()

Per creare un nuovo spider, crea un nuovo file Python nella directory del progetto 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" )

Tutti gli spider ereditano la classe Spider del modulo Scrapy e avviano le richieste utilizzando il metodo start_requests:

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

Quando Scrapy ha completato il caricamento della pagina, chiamerà la funzione di callback (self.parseHome).

Avendo l'oggetto risposta, il contenuto di tuo interesse può essere preso :

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

E, a scopo dimostrativo, salvalo in un file "popular.list".

Avvia lo spider appena creato usando il comando:

$ sudo scrapy crawl reddit

Una volta completato, l'ultimo titolo estratto si troverà nel file popular.list:

$ cat popular.list

Pianificazione di Scrapyd

Per programmare l'esecuzione dei tuoi spider, utilizza il servizio offerto da Scrapy "Scrapy Cloud" (vedi https://scrapinghub.com/scrapy-cloud ) oppure installa il demone open source direttamente sul tuo server .

Assicurati di essere nell'ambiente virtuale creato in precedenza e installa il pacchetto scrapyd tramite pip:

$ cd /var/scrapy/

$ sudo source /var/scrapy/bin/activate

$ sudo pip install scrapyd

Una volta completata l'installazione, prepara un servizio creando il file /etc/systemd/system/scrapyd.service con il seguente contenuto:

[Unit]

Description=Scrapy Daemon

[Service]

ExecStart=/var/scrapy/bin/scrapyd

Salva il file appena creato e avvia il servizio tramite:

$ sudo systemctl start scrapyd

Ora il demone è configurato e pronto per accettare nuovi spider.

Per distribuire il tuo spider di esempio, devi utilizzare uno strumento, chiamato "scrapyd-client", fornito da Scrapy. Procedi con la sua installazione tramite pip:

$ sudo pip install scrapyd-client

Continua modificando il file scrapy.cfg e impostando i dati di distribuzione:

[settings]

default = example.settings
    
[deploy]

url = http://localhost:6800/

project = example

Ora, distribuisci semplicemente eseguendo il comando:

$ sudo scrapyd-deploy

Per programmare l'esecuzione dello spider, chiama l'API scrapyd:

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

Linux
  1. Come creare un database in MySQL con MySQL Workbench

  2. Come creare una Vm da zero con Virsh?

  3. Come creare un nuovo utente con accesso Ssh?

  4. Come creare un sito Web con SitePad

  5. Come creare un file con una determinata dimensione in Linux?

Come creare contenitori Proxmox dal dashboard dell'interfaccia utente Web Proxmox

Come creare un gruppo di volumi in Linux con LVM

Come creare documenti con gli script Bash

Come installare Calibre Web su Ubuntu 20.04 con Docker

Come creare una Web App con Node.js su Jelastic Cloud

Come creare un e-commerce con Magento