Scrapy - Estrattori di link

Descrizione

Come indica il nome stesso, Link Extractors sono gli oggetti che vengono utilizzati per estrarre i link dalle pagine web utilizzando scrapy.http.Responseoggetti. In Scrapy, ci sono estrattori incorporati comescrapy.linkextractors importare LinkExtractor. Puoi personalizzare il tuo estrattore di link in base alle tue esigenze implementando una semplice interfaccia.

Ogni estrattore di link ha un metodo pubblico chiamato extract_linksche include un oggetto Response e restituisce un elenco di oggetti scrapy.link.Link. Puoi istanziare gli estrattori di link solo una volta e chiamare più volte il metodo extract_links per estrarre link con risposte diverse. La CrawlSpiderclass utilizza estrattori di link con una serie di regole il cui scopo principale è estrarre i link.

Riferimento di Link Extractor integrato

Normalmente gli estrattori di link sono raggruppati con Scrapy e sono forniti nel modulo scrapy.linkextractors. Per impostazione predefinita, l'estrattore di link sarà LinkExtractor che è uguale in funzionalità a LxmlLinkExtractor -

from scrapy.linkextractors import LinkExtractor

LxmlLinkExtractor

class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow = (), deny = (), 
   allow_domains = (), deny_domains = (), deny_extensions = None, restrict_xpaths = (), 
   restrict_css = (), tags = ('a', 'area'), attrs = ('href', ), 
   canonicalize = True, unique = True, process_value = None)

Il LxmlLinkExtractor è un estrattore di collegamento altamente raccomandato, perché ha opzioni di filtraggio a portata di mano e viene utilizzato con HTMLParser robusta di lxml.

Suor n Parametro e descrizione
1

allow (un'espressione regolare (o un elenco di))

Consente una singola espressione o un gruppo di espressioni che dovrebbero corrispondere all'URL da estrarre. Se non viene menzionato, corrisponderà a tutti i collegamenti.

2

deny (un'espressione regolare (o un elenco di))

Blocca o esclude una singola espressione o gruppo di espressioni che dovrebbero corrispondere all'URL che non deve essere estratto. Se non viene menzionato o lasciato vuoto, non eliminerà i collegamenti indesiderati.

3

allow_domains (str o elenco)

Consente una singola stringa o un elenco di stringhe che devono corrispondere ai domini da cui devono essere estratti i collegamenti.

4

deny_domains (str o elenco)

Blocca o esclude una singola stringa o un elenco di stringhe che devono corrispondere ai domini da cui non devono essere estratti i collegamenti.

5

deny_extensions (elenco)

Blocca l'elenco delle stringhe con le estensioni durante l'estrazione dei collegamenti. Se non è impostato, per impostazione predefinita verrà impostato su IGNORED_EXTENSIONS che contiene l'elenco predefinito nel pacchetto scrapy.linkextractors .

6

restrict_xpaths (str o elenco)

È una regione dell'elenco XPath da cui devono essere estratti i collegamenti dalla risposta. Se fornito, i collegamenti verranno estratti solo dal testo, che viene selezionato da XPath.

7

restrict_css (str o elenco)

Si comporta in modo simile al parametro limits_xpaths che estrarrà i collegamenti dalle regioni selezionate CSS all'interno della risposta.

8

tags (str o elenco)

Un singolo tag o un elenco di tag da tenere in considerazione durante l'estrazione dei collegamenti. Per impostazione predefinita, sarà ('a', 'area').

9

attrs (elenco)

Un singolo attributo o elenco di attributi dovrebbe essere considerato durante l'estrazione dei collegamenti. Per impostazione predefinita, sarà ('href',).

10

canonicalize (booleano)

L'URL estratto viene riportato al formato standard utilizzando scrapy.utils.url.canonicalize_url . Per impostazione predefinita, sarà True.

11

unique (booleano)

Verrà utilizzato se i collegamenti estratti vengono ripetuti.

12

process_value (richiamabile)

È una funzione che riceve un valore dai tag e dagli attributi scansionati. Il valore ricevuto può essere modificato e restituito oppure non verrà restituito nulla per rifiutare il collegamento. Se non utilizzato, per impostazione predefinita sarà lambda x: x.

Esempio

Il codice seguente viene utilizzato per estrarre i collegamenti:

<a href = "javascript:goToPage('../other/page.html'); return false">Link text</a>

La seguente funzione di codice può essere utilizzata in process_value -

def process_value(val): 
   m = re.search("javascript:goToPage\('(.*?)'", val) 
   if m: 
      return m.group(1)