Учебники

Scrapy — Shell

Оболочку Scrapy можно использовать для очистки данных с помощью безошибочного кода, без использования паука. Основная цель оболочки Scrapy — проверить извлеченный код, XPath или CSS-выражения. Это также помогает указать веб-страницы, с которых вы копируете данные.

Настройка оболочки

Оболочку можно настроить, установив консоль IPython (используется для интерактивных вычислений), которая представляет собой мощную интерактивную оболочку, которая обеспечивает автоматическое завершение, цветной вывод и т. Д.

Если вы работаете на платформе Unix, то лучше установить IPython. Вы также можете использовать bpython , если IPython недоступен.

Вы можете настроить оболочку, установив переменную среды SCRAPY_PYTHON_SHELL или определив файл scrapy.cfg следующим образом:

[settings]
shell = bpython

Запуск оболочки

Оболочка Scrapy может быть запущена с помощью следующей команды —

scrapy shell <url>

URL-адрес указывает URL-адрес, для которого необходимо очистить данные.

Используя Shell

Оболочка предоставляет некоторые дополнительные ярлыки и объекты Scrapy, как описано в следующей таблице:

Доступные ярлыки

Shell предоставляет следующие доступные ярлыки в проекте —

Sr.No Ярлык и описание
1

shelp ()

Он предоставляет доступные объекты и ярлыки с помощью опции справки.

2

выборки (request_or_url)

Он собирает ответ от запроса или URL, и связанные объекты будут обновляться должным образом.

3

Вид (ответ)

Вы можете просмотреть ответ на данный запрос в локальном браузере для наблюдения и, чтобы правильно отобразить внешнюю ссылку, он добавляет базовый тег к телу ответа.

shelp ()

Он предоставляет доступные объекты и ярлыки с помощью опции справки.

выборки (request_or_url)

Он собирает ответ от запроса или URL, и связанные объекты будут обновляться должным образом.

Вид (ответ)

Вы можете просмотреть ответ на данный запрос в локальном браузере для наблюдения и, чтобы правильно отобразить внешнюю ссылку, он добавляет базовый тег к телу ответа.

Доступные объекты Scrapy

Shell предоставляет следующие доступные объекты Scrapy в проекте —

Sr.No Объект и описание
1

гусеничный трактор

Он указывает текущий объект сканера.

2

паук

Если для текущего URL нет паука, он будет обрабатывать объект URL или паука, определяя нового паука.

3

запрос

Указывает объект запроса для последней собранной страницы.

4

ответ

Он указывает объект ответа для последней собранной страницы.

5

настройки

Он предоставляет текущие настройки Scrapy.

гусеничный трактор

Он указывает текущий объект сканера.

паук

Если для текущего URL нет паука, он будет обрабатывать объект URL или паука, определяя нового паука.

запрос

Указывает объект запроса для последней собранной страницы.

ответ

Он указывает объект ответа для последней собранной страницы.

настройки

Он предоставляет текущие настройки Scrapy.

Пример сессии Shell

Давайте попробуем очистить сайт scrapy.org, а затем начнем собирать данные с reddit.com, как описано.

Прежде чем двигаться вперед, сначала запустим оболочку, как показано в следующей команде —

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

Scrapy будет отображать доступные объекты при использовании вышеуказанного URL —

[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

Далее начнем с обработки объектов, показанных следующим образом —

>> 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     
... 

Вызов оболочки от пауков для проверки ответов

Вы можете проверить ответы, которые обрабатываются пауком, только если вы ожидаете получить этот ответ.

Например —

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)

Как показано в приведенном выше коде, вы можете вызывать оболочку от пауков для проверки ответов, используя следующую функцию —

scrapy.shell.inspect_response

Теперь запустите паука, и вы получите следующий экран —

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' 

Вы можете проверить, работает ли извлеченный код, используя следующий код —

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

Он отображает вывод как

[]

Выше строка показала только пустой вывод. Теперь вы можете вызвать оболочку для проверки ответа следующим образом:

>> view(response)

Он отображает ответ как