Изучение фреймворка сканера Python Scrapy

Python

Scrapy — это платформа приложений, написанная на Python для сканирования данных веб-сайта и извлечения структурных данных.

1. Введение в Scrapy Framework

Scrapy — это платформа приложений, написанная для сканирования данных веб-сайта и извлечения структурных данных. Его можно использовать в ряде программ, включая интеллектуальный анализ данных, обработку информации или хранение исторических данных.

Первоначально он был разработан для парсинга веб-страниц (точнее, парсинга веб-страниц), но также может использоваться для извлечения данных, возвращаемых API-интерфейсами (такими как веб-службы Amazon Associates) или поисковыми роботами общего назначения.

Во-вторых, блок-схема структуры

На следующих диаграммах показана архитектура Scrapy, включая компоненты и обзор потока данных, который происходит в системе (зеленые стрелки). Ниже приводится краткое введение в каждый компонент вместе со ссылками на подробное содержание. Поток данных описан ниже.

1. Компоненты

Scrapy Engine

Механизм отвечает за управление потоком данных через все компоненты системы и инициирование событий при выполнении соответствующих действий. Подробнее см. в разделе «Поток данных» ниже.

Планировщик

Планировщик принимает запросы от механизма и ставит их в очередь для предоставления механизму, когда механизм запросит их позже.

Загрузчик

Загрузчик отвечает за получение данных страницы и предоставление их движку, а затем пауку.

Spiders

Spider — это класс, написанный пользователями Scrapy для анализа ответа и извлечения элемента (то есть полученного элемента) или URL-адреса для дополнительных последующих действий. Каждый паук отвечает за работу с определенным (или несколькими) веб-сайтами. См. Пауки для получения дополнительной информации.

Item Pipeline

Конвейер элементов отвечает за обработку элементов, извлеченных пауком. Типичными процессами являются очистка, проверка и сохранение (например, доступ к базе данных). См. Конвейер элементов для получения дополнительной информации.

Промежуточное программное обеспечение загрузчика

Промежуточное ПО загрузчика — это особый хук между движком и загрузчиком, который обрабатывает ответ, передаваемый загрузчиком движку. Он предоставляет простой механизм расширения функциональности Scrapy путем вставки пользовательского кода. Дополнительную информацию см. в промежуточном программном обеспечении загрузчика.

Промежуточное ПО Spider

Промежуточное ПО паука — это особый хук между движком и пауком, который обрабатывает ввод (ответ) и вывод паука (элементы и запросы). Он предоставляет простой механизм расширения функциональности Scrapy путем вставки пользовательского кода. Дополнительные сведения см. в промежуточном программном обеспечении Spider.

2. Поток данных

Поток данных в Scrapy контролируется механизмом выполнения, и процесс выглядит следующим образом:

  1. Механизм открывает веб-сайт (открывает домен), находит паука, который обрабатывает веб-сайт, и запрашивает у паука первые URL-адреса для сканирования.

  2. Движок получает первый URL-адрес для обхода от Паука и планирует его с помощью Запроса в Планировщике.

  3. Движок запрашивает у планировщика следующий URL для обхода.

  4. Планировщик возвращает следующий URL-адрес для обхода движку, а движок перенаправляет URL-адрес загрузчику (загрузчику) через промежуточное программное обеспечение загрузки (направление запроса).

  5. Как только страница загружена, загрузчик генерирует ответ для страницы и отправляет его в механизм через промежуточное программное обеспечение загрузки (направление ответа).

  6. Движок получает ответ от загрузчика и отправляет его в Spider для обработки через промежуточное ПО Spider (направление ввода).

  7. Паук обрабатывает ответ и возвращает просканированный элемент и (последующий) новый запрос механизму.

  8. Механизм отправляет просканированный элемент (возвращенный пауком) в конвейер элементов и отправляет запрос (возвращенный пауком) планировщику.

  9. Повторять (с шага 2) до тех пор, пока в планировщике больше не останется запросов и движок не закроет сайт.

3. Сеть, управляемая событиями

Scrapy основан на сетевом фреймворке, управляемом событиями.Twistedзаписывать. Поэтому Scrapy реализуется неблокирующим (т.е. асинхронным) способом на основе соображений параллелизма.

Для получения дополнительной информации об асинхронном программировании и Twisted перейдите по следующим ссылкам:

3. 4 шага, чтобы сделать рептилий

  1. Новый проект (scrapy startproject xxx): создайте новый проект сканера.

  2. Уточните цель (напишите items.py): укажите цель, которую вы хотите очистить

  3. Создайте сканер (spiders/xxsp der.py): создайте сканер, чтобы начать сканирование в Интернете.

  4. Хранить контент (pipelines.py): разработка конвейеров для хранения просканированного контента.

В-четвертых, монтажная рама

Здесь мы используем conda для установки:

conda install scrapy

или использоватьpipУстановить:

pip install scrapy

Посмотреть установку:

➜  spider scrapy -h
Scrapy 1.4.0 - no active project

Usage:
  scrapy <command> [options] [args]

Available commands:
  bench         Run quick benchmark test
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

  [ more ]      More commands available when run from project directory

Use "scrapy <command> -h" to see more info about a command

1. Создайте проект

➜  spider scrapy startproject SF
New Scrapy project 'SF', using template directory '/Users/kaiyiwang/anaconda2/lib/python2.7/site-packages/scrapy/templates/project', created in:
    /Users/kaiyiwang/Code/python/spider/SF

You can start your first spider with:
    cd SF
    scrapy genspider example example.com
➜  spider

использоватьtreeКоманда может просматривать структуру проекта:

➜  SF tree
.
├── SF
│   ├── __init__.py
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
│       └── __init__.py
└── scrapy.cfg

2. Создайте шаблон в каталоге пауков

➜  spiders scrapy genspider sf "https://segmentfault.com"
Created spider 'sf' using template 'basic' in module:
  SF.spiders.sf
➜  spiders

Таким образом создается файл проекта sf.py.

# -*- coding: utf-8 -*-
import scrapy


class SfSpider(scrapy.Spider):
    name = 'sf'
    allowed_domains = ['https://segmentfault.com']
    start_urls = ['http://https://segmentfault.com/']

    def parse(self, response):
        pass

Заказ:

# 测试爬虫是否正常, sf为爬虫的名称
➜  scrapy check sf

# 运行爬虫
➜  scrapy crawl sf

Статьи по Теме:

Руководство по началу работы со Scrapy