Автор оригинала: 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. Я использовал Учебное пособие Страница, чтобы вести себя. Вот мой Код Отказ В другом посте я покажу, как позволить вашему пауке пропустить страницы и извлечь данные с этих страниц.