Spider — это класс, отвечающий за определение того, как переходить по ссылкам через веб-сайт и извлекать информацию со страниц.
Пауки Scrapy по умолчанию следующие:
scrapy.Spider
Это паук, от которого все остальные пауки должны наследовать. У него есть следующий класс —
class scrapy.spiders.Spider
В следующей таблице приведены поля scrapy.Spider class —
Sr.No | Поле и описание |
---|---|
1 |
название Это имя вашего паука. |
2 |
allowed_domains Это список доменов, по которым ползает паук. |
3 |
start_urls Это список URL-адресов, которые будут корнями для последующих сканирований, откуда начнет сканировать паук. |
4 |
Пользовательские настройки Эти настройки, при запуске паука, будут переопределены в конфигурации всего проекта. |
5 |
гусеничный трактор Это атрибут, который ссылается на объект Crawler, к которому привязан экземпляр паука. |
6 |
настройки Это настройки для запуска паука. |
7 |
лесоруб Это регистратор Python, используемый для отправки сообщений журнала. |
8 |
from_crawler (гусеничный, * Args, ** kwargs) Это метод класса, который создает вашего паука. Параметры —
|
9 |
start_requests () Если конкретные URL-адреса не указаны, а паук открыт для списания, Scrapy вызывает метод start_requests () . |
10 |
make_requests_from_url (URL) Это метод, используемый для преобразования URL-адресов в запросы. |
11 |
синтаксический анализ (ответ) Этот метод обрабатывает ответ и возвращает отмененные данные по следующим URL-адресам. |
12 |
журнал (сообщение [уровень, компонент]) Это метод, который отправляет сообщение журнала через регистратор пауков. |
13 |
закрытая (причина) Этот метод вызывается, когда паук закрывается. |
название
Это имя вашего паука.
allowed_domains
Это список доменов, по которым ползает паук.
start_urls
Это список URL-адресов, которые будут корнями для последующих сканирований, откуда начнет сканировать паук.
Пользовательские настройки
Эти настройки, при запуске паука, будут переопределены в конфигурации всего проекта.
гусеничный трактор
Это атрибут, который ссылается на объект Crawler, к которому привязан экземпляр паука.
настройки
Это настройки для запуска паука.
лесоруб
Это регистратор Python, используемый для отправки сообщений журнала.
from_crawler (гусеничный, * Args, ** kwargs)
Это метод класса, который создает вашего паука. Параметры —
сканер — сканер, к которому будет привязан экземпляр паука.
args (list) — эти аргументы передаются методу _init_ () .
kwargs (dict) — эти ключевые аргументы передаются методу _init_ () .
start_requests ()
Если конкретные URL-адреса не указаны, а паук открыт для списания, Scrapy вызывает метод start_requests () .
make_requests_from_url (URL)
Это метод, используемый для преобразования URL-адресов в запросы.
синтаксический анализ (ответ)
Этот метод обрабатывает ответ и возвращает отмененные данные по следующим URL-адресам.
журнал (сообщение [уровень, компонент])
Это метод, который отправляет сообщение журнала через регистратор пауков.
закрытая (причина)
Этот метод вызывается, когда паук закрывается.
Аргументы Паука
Аргументы Spider используются для указания начальных URL-адресов и передаются с помощью команды сканирования с параметром -a , который показан ниже:
scrapy crawl first_scrapy -a group = accessories
Следующий код демонстрирует, как паук получает аргументы —
import scrapy class FirstSpider(scrapy.Spider): name = "first" def __init__(self, group = None, *args, **kwargs): super(FirstSpider, self).__init__(*args, **kwargs) self.start_urls = ["http://www.example.com/group/%s" % group]
Универсальные пауки
Вы можете использовать общих пауков, чтобы подклассы ваших пауков от. Их цель состоит в том, чтобы следовать всем ссылкам на веб-сайте на основе определенных правил для извлечения данных со всех страниц.
Для примеров, используемых в следующих пауках, давайте предположим, что у нас есть проект со следующими полями:
import scrapy from scrapy.item import Item, Field class First_scrapyItem(scrapy.Item): product_title = Field() product_link = Field() product_description = Field()
CrawlSpider
CrawlSpider определяет набор правил для перехода по ссылкам и удаления более одной страницы. У него есть следующий класс —
class scrapy.spiders.CrawlSpider
Ниже приведены атрибуты класса CrawlSpider —
правила
Это список объектов правил, который определяет, как сканер следует по ссылке.
В следующей таблице приведены правила класса CrawlSpider —
Sr.No | Правило и описание |
---|---|
1 |
LinkExtractor Он определяет, как паук следует по ссылкам и извлекает данные. |
2 |
Перезвоните Это должно быть вызвано после того, как каждая страница очищена. |
3 |
следовать Указывает, следует ли продолжать следующие ссылки или нет. |
LinkExtractor
Он определяет, как паук следует по ссылкам и извлекает данные.
Перезвоните
Это должно быть вызвано после того, как каждая страница очищена.
следовать
Указывает, следует ли продолжать следующие ссылки или нет.
parse_start_url (ответ)
Он возвращает либо элемент, либо объект запроса, позволяя проанализировать начальные ответы.
Примечание. Убедитесь, что вы переименовываете функцию разбора, отличную от разбора, при написании правил, потому что функция разбора используется CrawlSpider для реализации своей логики.
Давайте посмотрим на следующий пример, где spider начинает сканировать домашнюю страницу demoexample.com, собирая все страницы, ссылки и анализ с помощью метода parse_items —
import scrapy from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor class DemoSpider(CrawlSpider): name = "demo" allowed_domains = ["www.demoexample.com"] start_urls = ["http://www.demoexample.com"] rules = ( Rule(LinkExtractor(allow =(), restrict_xpaths = ("//div[@class = 'next']",)), callback = "parse_item", follow = True), ) def parse_item(self, response): item = DemoItem() item["product_title"] = response.xpath("a/text()").extract() item["product_link"] = response.xpath("a/@href").extract() item["product_description"] = response.xpath("div[@class = 'desc']/text()").extract() return items
XMLFeedSpider
Это базовый класс для пауков, которые очищают от XML-каналов и перебирают узлы. У него есть следующий класс —
class scrapy.spiders.XMLFeedSpider
В следующей таблице показаны атрибуты класса, используемые для установки итератора и имени тега.
Sr.No | Атрибут и описание |
---|---|
1 |
итератор Он определяет используемый итератор. Это может быть iternodes, html или xml . По умолчанию это iternodes . |
2 |
itertag Это строка с именем узла для повторения. |
3 |
Пространства имен Он определяется списком (prefix, uri) кортежей, которые автоматически регистрируют пространства имен с помощью метода register_namespace () . |
4 |
adapt_response (ответ) Он получает ответ и изменяет тело ответа, как только он прибывает из промежуточного программного обеспечения паука, прежде чем паук начнет его анализировать. |
5 |
parse_node (ответ, селектор) Он получает ответ и селектор при вызове для каждого узла, соответствующего указанному имени тега. Примечание. Ваш паук не будет работать, если вы не переопределите этот метод. |
6 |
process_results (ответ, итоги) Возвращает список результатов и ответ, возвращенный пауком. |
итератор
Он определяет используемый итератор. Это может быть iternodes, html или xml . По умолчанию это iternodes .
itertag
Это строка с именем узла для повторения.
Пространства имен
Он определяется списком (prefix, uri) кортежей, которые автоматически регистрируют пространства имен с помощью метода register_namespace () .
adapt_response (ответ)
Он получает ответ и изменяет тело ответа, как только он прибывает из промежуточного программного обеспечения паука, прежде чем паук начнет его анализировать.
parse_node (ответ, селектор)
Он получает ответ и селектор при вызове для каждого узла, соответствующего указанному имени тега.
Примечание. Ваш паук не будет работать, если вы не переопределите этот метод.
process_results (ответ, итоги)
Возвращает список результатов и ответ, возвращенный пауком.
CSVFeedSpider
Он перебирает каждую из своих строк, получает CSV-файл в качестве ответа и вызывает метод parse_row () . У него есть следующий класс —
class scrapy.spiders.CSVFeedSpider
В следующей таблице показаны параметры, которые можно установить для файла CSV.
Sr.No | Вариант и описание |
---|---|
1 |
ограничитель Это строка, содержащая разделитель запятой (‘,’) для каждого поля. |
2 |
QuoteChar Это строка, содержащая кавычку (‘»‘) для каждого поля. |
3 |
заголовки Это список операторов, из которых можно извлечь поля. |
4 |
parse_row (ответ, строка) Он получает ответ и каждую строку вместе с ключом для заголовка. |
ограничитель
Это строка, содержащая разделитель запятой (‘,’) для каждого поля.
QuoteChar
Это строка, содержащая кавычку (‘»‘) для каждого поля.
заголовки
Это список операторов, из которых можно извлечь поля.
parse_row (ответ, строка)
Он получает ответ и каждую строку вместе с ключом для заголовка.
Пример CSVFeedSpider
from scrapy.spiders import CSVFeedSpider from demoproject.items import DemoItem class DemoSpider(CSVFeedSpider): name = "demo" allowed_domains = ["www.demoexample.com"] start_urls = ["http://www.demoexample.com/feed.csv"] delimiter = ";" quotechar = "'" headers = ["product_title", "product_link", "product_description"] def parse_row(self, response, row): self.logger.info("This is row: %r", row) item = DemoItem() item["product_title"] = row["product_title"] item["product_link"] = row["product_link"] item["product_description"] = row["product_description"] return item
SitemapSpider
SitemapSpider с помощью файлов Sitemap сканирует веб-сайт, находя URL-адреса из файла robots.txt. У него есть следующий класс —
class scrapy.spiders.SitemapSpider
В следующей таблице показаны поля SitemapSpider —
Sr.No | Поле и описание |
---|---|
1 |
sitemap_urls Список URL-адресов, которые вы хотите сканировать, указывая на карты сайта. |
2 |
sitemap_rules Это список кортежей (регулярное выражение, обратный вызов), где регулярное выражение является регулярным выражением, а обратный вызов используется для обработки URL-адресов, соответствующих регулярному выражению. |
3 |
sitemap_follow Это список регулярных выражений карты сайта. |
4 |
sitemap_alternate_links Определяет альтернативные ссылки, по которым нужно перейти для одного URL. |
sitemap_urls
Список URL-адресов, которые вы хотите сканировать, указывая на карты сайта.
sitemap_rules
Это список кортежей (регулярное выражение, обратный вызов), где регулярное выражение является регулярным выражением, а обратный вызов используется для обработки URL-адресов, соответствующих регулярному выражению.
sitemap_follow
Это список регулярных выражений карты сайта.
sitemap_alternate_links
Определяет альтернативные ссылки, по которым нужно перейти для одного URL.
Пример SitemapSpider
Следующий SitemapSpider обрабатывает все URL —
from scrapy.spiders import SitemapSpider class DemoSpider(SitemapSpider): urls = ["http://www.demoexample.com/sitemap.xml"] def parse(self, response): # You can scrap items here
Следующий SitemapSpider обрабатывает некоторые URL с обратным вызовом —
from scrapy.spiders import SitemapSpider class DemoSpider(SitemapSpider): urls = ["http://www.demoexample.com/sitemap.xml"] rules = [ ("/item/", "parse_item"), ("/group/", "parse_group"), ] def parse_item(self, response): # you can scrap item here def parse_group(self, response): # you can scrap group here
В следующем коде показаны файлы Sitemap в файле robots.txt, URL которого содержит / sitemap_company —
from scrapy.spiders import SitemapSpider class DemoSpider(SitemapSpider): urls = ["http://www.demoexample.com/robots.txt"] rules = [ ("/company/", "parse_company"), ] sitemap_follow = ["/sitemap_company"] def parse_company(self, response): # you can scrap company here
Вы даже можете комбинировать SitemapSpider с другими URL-адресами, как показано в следующей команде.