Учебники

Scrapy — Извлечение предметов

Для извлечения данных из веб-страниц Scrapy использует метод, называемый селекторами, основанный на выражениях XPath и CSS . Ниже приведены некоторые примеры выражений XPath:

  • / html / head / title — это выберет элемент <title> внутри элемента <head> документа HTML.

  • / html / head / title / text () — это выделит текст в том же элементе <title>.

  • // td — это выберет все элементы из <td>.

  • // div [@class = «slice»] — это выберет все элементы из div, которые содержат атрибут class = «slice»

/ html / head / title — это выберет элемент <title> внутри элемента <head> документа HTML.

/ html / head / title / text () — это выделит текст в том же элементе <title>.

// td — это выберет все элементы из <td>.

// div [@class = «slice»] — это выберет все элементы из div, которые содержат атрибут class = «slice»

Селекторы имеют четыре основных метода, как показано в следующей таблице:

Sr.No Метод и описание
1

экстракт ()

Возвращает строку в юникоде вместе с выбранными данными.

2

Re ()

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

3

XPath ()

Он возвращает список селекторов, который представляет узлы, выбранные выражением xpath, заданным в качестве аргумента.

4

CSS ()

Он возвращает список селекторов, который представляет узлы, выбранные выражением CSS, заданным в качестве аргумента.

экстракт ()

Возвращает строку в юникоде вместе с выбранными данными.

Re ()

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

XPath ()

Он возвращает список селекторов, который представляет узлы, выбранные выражением xpath, заданным в качестве аргумента.

CSS ()

Он возвращает список селекторов, который представляет узлы, выбранные выражением CSS, заданным в качестве аргумента.

Использование селекторов в оболочке

Чтобы продемонстрировать селекторы с помощью встроенной оболочки Scrapy, в вашей системе должен быть установлен IPython . Здесь важно то, что URL должны быть включены в кавычки при запуске Scrapy; в противном случае URL с символами ‘&’ не будут работать. Вы можете запустить оболочку с помощью следующей команды в каталоге верхнего уровня проекта —

scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"

Оболочка будет выглядеть следующим образом —

[ ... Scrapy log here ... ]

2014-01-23 17:11:42-0400 [scrapy] DEBUG: Crawled (200) 
<GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/>(referer: None)
[s] Available Scrapy objects:
[s]   crawler    <scrapy.crawler.Crawler object at 0x3636b50>
[s]   item       {}
[s]   request    <GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/>
[s]   response   <200 http://www.dmoz.org/Computers/Programming/Languages/Python/Books/>
[s]   settings   <scrapy.settings.Settings object at 0x3fadc50>
[s]   spider     <Spider 'default' at 0x3cebf50>
[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

In [1]:

При загрузке оболочки вы можете получить доступ к телу или заголовку, используя соответственно response.body и response.header . Аналогично, вы можете выполнять запросы к ответу, используя response.selector.xpath () или response.selector.css () .

Например —

In [1]: response.xpath('//title')
Out[1]: [<Selector xpath = '//title' data = u'<title>My Book - Scrapy'>]

In [2]: response.xpath('//title').extract()
Out[2]: [u'<title>My Book - Scrapy: Index: Chapters</title>']

In [3]: response.xpath('//title/text()')
Out[3]: [<Selector xpath = '//title/text()' data = u'My Book - Scrapy: Index:'>]

In [4]: response.xpath('//title/text()').extract()
Out[4]: [u'My Book - Scrapy: Index: Chapters']

In [5]: response.xpath('//title/text()').re('(\w+):')
Out[5]: [u'Scrapy', u'Index', u'Chapters']

Извлечение данных

Чтобы извлечь данные с обычного HTML-сайта, мы должны проверить исходный код сайта, чтобы получить XPath. После проверки вы увидите, что данные будут в теге ul . Выберите элементы внутри тега li .

Следующие строки кода показывают извлечение различных типов данных —

Для выбора данных в теге li —

response.xpath('//ul/li')

Для выбора описания —

response.xpath('//ul/li/text()').extract()

Для выбора заголовков сайта —

response.xpath('//ul/li/a/text()').extract()

Для выбора ссылок сайта —

response.xpath('//ul/li/a/@href').extract()

Следующий код демонстрирует использование вышеуказанных экстракторов —