Scrapy - Extracteurs de liens
La description
Comme son nom l'indique, les extracteurs de liens sont les objets utilisés pour extraire des liens de pages Web à l'aide de scrapy.http.Responseobjets. Dans Scrapy, il existe des extracteurs intégrés tels quescrapy.linkextractors importer LinkExtractor. Vous pouvez personnaliser votre propre extracteur de lien en fonction de vos besoins en implémentant une interface simple.
Chaque extracteur de lien a une méthode publique appelée extract_linksqui inclut un objet Response et renvoie une liste d'objets scrapy.link.Link. Vous ne pouvez instancier les extracteurs de liens qu'une seule fois et appeler la méthode extract_links plusieurs fois pour extraire des liens avec des réponses différentes. La CrawlSpiderclass utilise des extracteurs de liens avec un ensemble de règles dont le but principal est d'extraire des liens.
Référence de l'extracteur de lien intégré
Normalement, les extracteurs de liens sont regroupés avec Scrapy et sont fournis dans le module scrapy.linkextractors. Par défaut, l'extracteur de lien sera LinkExtractor qui est égal en fonctionnalité avec 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)
Le LxmlLinkExtractor est un extracteur de lien fortement recommandé, car il a des options de filtrage à portée de main et il est utilisé avec HTMLParser robuste lxml.
Sr. Non | Paramètre et description |
---|---|
1 | allow (une expression régulière (ou une liste de)) Il autorise une seule expression ou un groupe d'expressions qui doit correspondre à l'url à extraire. S'il n'est pas mentionné, il correspondra à tous les liens. |
2 | deny (une expression régulière (ou une liste de)) Il bloque ou exclut une seule expression ou un groupe d'expressions qui doivent correspondre à l'url qui ne doit pas être extraite. S'il n'est pas mentionné ou laissé vide, il n'éliminera pas les liens indésirables. |
3 | allow_domains (chaîne ou liste) Il permet une seule chaîne ou une liste de chaînes qui doivent correspondre aux domaines à partir desquels les liens doivent être extraits. |
4 | deny_domains (chaîne ou liste) Il bloque ou exclut une seule chaîne ou une liste de chaînes qui doivent correspondre aux domaines dont les liens ne doivent pas être extraits. |
5 | deny_extensions (liste) Il bloque la liste des chaînes avec les extensions lors de l'extraction des liens. S'il n'est pas défini, il sera défini par défaut sur IGNORED_EXTENSIONS qui contient une liste prédéfinie dans le package scrapy.linkextractors . |
6 | restrict_xpaths (chaîne ou liste) Il s'agit d'une région de liste XPath à partir de laquelle les liens doivent être extraits de la réponse. S'ils sont donnés, les liens seront extraits uniquement du texte, qui est sélectionné par XPath. |
sept | restrict_css (chaîne ou liste) Il se comporte de manière similaire au paramètre restrict_xpaths qui extraira les liens des régions CSS sélectionnées à l'intérieur de la réponse. |
8 | tags (chaîne ou liste) Une seule balise ou une liste de balises à prendre en compte lors de l'extraction des liens. Par défaut, ce sera ('a', 'area'). |
9 | attrs (liste) Un seul attribut ou une liste d'attributs doit être pris en compte lors de l'extraction des liens. Par défaut, ce sera ('href',). |
dix | canonicalize (booléen) L'URL extraite est mise au format standard en utilisant scrapy.utils.url.canonicalize_url . Par défaut, ce sera True. |
11 | unique (booléen) Il sera utilisé si les liens extraits sont répétés. |
12 | process_value (appelable) C'est une fonction qui reçoit une valeur des balises et attributs scannés. La valeur reçue peut être modifiée et retournée sinon rien ne sera retourné pour rejeter le lien. S'il n'est pas utilisé, il sera par défaut lambda x: x. |
Exemple
Le code suivant est utilisé pour extraire les liens -
<a href = "javascript:goToPage('../other/page.html'); return false">Link text</a>
La fonction de code suivante peut être utilisée dans process_value -
def process_value(val):
m = re.search("javascript:goToPage\('(.*?)'", val)
if m:
return m.group(1)