Рубрики
Без рубрики

Написание простого веб-скребка с использованием Scrapy

Веб-скребки – отличный способ собирать данные для проектов. В этом примере я буду использовать @Scrapy Framework (https://scrapy.org/) для создания веб-скребка, который получает ссылки на продукты, когда …

Автор оригинала: Andrew Serra.

Веб-скребки – отличный способ собирать данные для проектов. В этом примере я буду использовать Струпкие рамки Чтобы создать веб-скребок, который получает ссылки на продукты при рассмотрении «Наушники» на Amazon.com

Для начала, давайте проверим, установите ли у нас библиотека SCHAPY. Откройте терминал на вашем устройстве Mac OS и введите:

$ scrapy version

Во время этого поста я использую эту версию (1.5.1). Вы должны получать вывод похоже на это.

Scrapy 1.5.1

Если у вас еще нет его установленного, вы можете использовать Пип установить его. Вот как это сделать:

$ pip install Scrapy

Время добраться до кодирования. Скапли использует команду в терминале для создания проекта. Он установит вас с набором файлов для начала. Перейдите к каталогу, где вы хотите сохранить проект. Чтобы начать проект, вы начнете, набрав эту строку в терминале:

$ scrapy startproject headphones

Струпкость создаст каталог с таким содержанием:

headphones/
    scrapy.cfg    
    headphones/
        __init__.py
        items.py          
        middlewares.py    
        pipelines.py      
        settings.py       
        spiders/          
            __init__.py

Мы создадим наш первый файл под каталогом пауков. Я назову это Наушники_spider.py Отказ После создания нового файла ваша структура каталогов должна выглядеть так:

headphones/
    scrapy.cfg    
    headphones/
        __init__.py
        items.py          
        middlewares.py    
        pipelines.py      
        settings.py       
        spiders/          
            __init__.py
            headphone_spider.py

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

import scrapy    # adding scrapy to our file

class HeadphoneSpider(scrapy.Spider):   # our class inherits from scrapy.Spider

  name = "headphones"   # we will name this as headphones and we will need it later on

Линия Имя очень важно здесь. Когда мы будем запускать наш терминал формы паука, вы будете использовать имя паука, чтобы начать ползать в Интернете. Имя должно быть максимально ясным, поскольку у вас могут быть несколько пауков позже.

Теперь пришло время для первой функции в нашем классе! Чтобы сделать веб-соскоб, у нас будут две важные части. Первая часть – отправить запрос на сайт (ы), которые мы будем соскребать. Мы назваем нашу функцию start_requests И мы определим список URL-адресов, которые мы хотим посещать и отправлять их запросы.

def start_requests(self):
  urls = []	# list to enter our urls

    for url in urls:
    	yield scrapy.Request(url=url, callback=self.parse)  # we will explain the callback soon

Ключевое слово . доходность создает генератор, но действует как Возвращение ключевое слово. Это вернет генератор. Генераторы полезны, когда вы используете список элементов и не будете использовать их снова. Они будут обработаны один раз, а затем забыли.

Аргумент ключевых слов Обратный вызов используется для вызова другой функции, когда есть ответ от функции. После Scrapy.request (URL = URL, .parse) Завершено, он вызывает нашу вторую функцию в классе. Который будет назван Разбор Отказ Вот:

def parse(self, response):
  img_urls = response.css('img::attr(src)').extract()
  with open('urls.txt', 'w') as f:
    	for u in img_urls:
        	f.write(u + "\n")

В этой функции первая строка – это то, где мы используем селекторы Scrapy. Мы используем ответ, который генерируется из Scrapy.request () Функция как параметр. Мы будем использовать .csss () Как селектор для анализа данных, которые мы ищем. Так как мы ищем изображения, мы войдем .css ('img') Но это даст воспользоваться всеми Теги, которые не извлекают то, что нам нужно. Поскольку теги изображения в HTML имеют атрибут SRC Мы будем использовать это, чтобы выбрать источник изображения. Так что теперь у нас есть объект селектора! Единственное, что мы оставили, – это извлекать данные, которые мы нашли, просто добавляя .extract () функция до конца. После всего этого я пишу все имена URL-адресов к текстовому файлу.

Вот окончательная версия нашего Наушники_spider.py файл.

import scrapy

class HeadphonesSpider(scrapy.Spider):

    name = "headphones"

    def start_requests(self):
        urls = [
        'https://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=headphones&rh=i%3Aaps%2Ck%3Aheadphones&ajr=2',
        ]

        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        img_urls = response.css('img::attr(src)').extract()
        with open('urls.txt', 'w') as f:
            for u in img_urls:
                f.write(u + "\n")

Чтобы запустить свой паук Перейти к каталогу, который включает в себя весь проект, каталог верхнего уровня, а также в типе терминала:

$ scrapy crawl headphones

Имя Наушники это имя, которое мы использовали в классе. И это начнется ползание!

Это был первый проект, который я сделал с помощью Scraphy. Я использовал Учебное пособие Страница, чтобы вести себя. Вот мой Код Отказ В другом посте я покажу, как позволить вашему пауке пропустить страницы и извлечь данные с этих страниц.