Оболочку 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)
Он отображает ответ как