Scrapy - Coquille

La description

Scrapy Shell peut être utilisé pour supprimer les données avec un code sans erreur, sans l'utilisation d'araignée. L'objectif principal de Scrapy Shell est de tester le code extrait, XPath ou les expressions CSS. Il permet également de spécifier les pages Web à partir desquelles vous récupérez les données.

Configurer le Shell

Le shell peut être configuré en installant la console IPython (utilisée pour le calcul interactif), qui est un puissant shell interactif qui donne la complétion automatique, la sortie colorisée, etc.

Si vous travaillez sur la plate-forme Unix, il est préférable d'installer IPython. Vous pouvez également utiliser bpython , si IPython est inaccessible.

Vous pouvez configurer le shell en définissant la variable d'environnement appelée SCRAPY_PYTHON_SHELL ou en définissant le fichier scrapy.cfg comme suit -

[settings]
shell = bpython

Lancement du Shell

Scrapy Shell peut être lancé à l'aide de la commande suivante -

scrapy shell <url>

L' URL spécifie l'URL pour laquelle les données doivent être récupérées.

Utilisation du shell

Le shell fournit des raccourcis supplémentaires et des objets Scrapy comme décrit dans le tableau suivant -

Raccourcis disponibles

Shell fournit les raccourcis disponibles suivants dans le projet -

Sr. Non Raccourci et description
1

shelp()

Il fournit les objets et raccourcis disponibles avec l'option d'aide.

2

fetch(request_or_url)

Il recueille la réponse de la demande ou de l'URL et les objets associés seront mis à jour correctement.

3

view(response)

Vous pouvez afficher la réponse pour la demande donnée dans le navigateur local pour l'observation et pour afficher correctement le lien externe, il ajoute une balise de base au corps de la réponse.

Objets Scrapy disponibles

Shell fournit les objets Scrapy disponibles suivants dans le projet -

Sr. Non Objet et description
1

crawler

Il spécifie l'objet du robot d'exploration actuel.

2

spider

S'il n'y a pas d'araignée pour l'URL actuelle, alors il gérera l'URL ou l'objet d'araignée en définissant la nouvelle araignée.

3

request

Il spécifie l'objet de requête pour la dernière page collectée.

4

response

Il spécifie l'objet de réponse pour la dernière page collectée.

5

settings

Il fournit les paramètres Scrapy actuels.

Exemple de session Shell

Essayons de gratter le site scrapy.org, puis commençons à supprimer les données de reddit.com comme décrit.

Avant d'aller de l'avant, nous allons d'abord lancer le shell comme indiqué dans la commande suivante -

scrapy shell 'http://scrapy.org' --nolog

Scrapy affichera les objets disponibles tout en utilisant l'URL ci-dessus -

[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x1e16b50>
[s]   item       {}
[s]   request    <GET http://scrapy.org >
[s]   response   <200 http://scrapy.org >
[s]   settings   <scrapy.settings.Settings object at 0x2bfd650>
[s]   spider     <Spider 'default' at 0x20c6f50>
[s] Useful shortcuts:
[s]   shelp()           Provides available objects and shortcuts with help option
[s]   fetch(req_or_url) Collects the response from the request or URL and associated 
objects will get update
[s]   view(response)    View the response for the given request

Ensuite, commencez par le travail des objets, comme suit -

>> response.xpath('//title/text()').extract_first() 
u'Scrapy | A Fast and Powerful Scraping and Web Crawling Framework'  
>> fetch("http://reddit.com") 
[s] Available Scrapy objects: 
[s]   crawler     
[s]   item       {} 
[s]   request     
[s]   response   <200 https://www.reddit.com/> 
[s]   settings    
[s]   spider      
[s] Useful shortcuts: 
[s]   shelp()           Shell help (print this help) 
[s]   fetch(req_or_url) Fetch request (or URL) and update local objects 
[s]   view(response)    View response in a browser  
>> response.xpath('//title/text()').extract() 
[u'reddit: the front page of the internet']  
>> request = request.replace(method="POST")  
>> fetch(request) 
[s] Available Scrapy objects: 
[s]   crawler     
...

Invocation du shell des araignées pour inspecter les réponses

Vous pouvez inspecter les réponses qui sont traitées à partir de l'araignée, uniquement si vous vous attendez à obtenir cette réponse.

Par exemple -

import scrapy 

class SpiderDemo(scrapy.Spider): 
   name = "spiderdemo" 
   start_urls = [ 
      "http://mysite.com", 
      "http://mysite1.org", 
      "http://mysite2.net", 
   ]  
   
   def parse(self, response): 
      # You can inspect one specific response 
      if ".net" in response.url: 
         from scrapy.shell import inspect_response 
         inspect_response(response, self)

Comme indiqué dans le code ci-dessus, vous pouvez appeler le shell des araignées pour inspecter les réponses à l'aide de la fonction suivante -

scrapy.shell.inspect_response

Maintenant, exécutez l'araignée et vous obtiendrez l'écran suivant -

2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200)  (referer: None) 
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200)  (referer: None) 
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200)  (referer: None) 
[s] Available Scrapy objects: 
[s]   crawler     
...  
>> response.url 
'http://mysite2.org'

Vous pouvez examiner si le code extrait fonctionne à l'aide du code suivant -

>> response.xpath('//div[@class = "val"]')

Il affiche la sortie comme

[]

La ligne ci-dessus n'a affiché qu'une sortie vierge. Vous pouvez maintenant appeler le shell pour inspecter la réponse comme suit -

>> view(response)

Il affiche la réponse comme

True