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