Как получить возвращенный список от паука-скрапа - PullRequest
1 голос
/ 22 февраля 2020

Итак, я делаю сценарий для проверки моих пауков, но я не знаю, как зафиксировать возвращенные данные в сценарии, в котором он запускает паука.

У меня есть return [self.p_name, self.price, self.currency], чтобы вернуться в конец паука.

В тестере пауков у меня есть этот скрипт:

#!/usr/bin/python3
#-*- coding: utf-8 -*-

# Import external libraries
import scrapy
from scrapy.crawler import CrawlerProcess
from Ruby.spiders.furla import Furla

# Import internal libraries

# Variables

t = CrawlerProcess()

def test_furla():
    x = t.crawl(Furla, url='https://www.furla.com/pt/pt/eshop/furla-sleek-BAHMW64BW000ZN98.html?dwvar_BAHMW64BW000ZN98_color=N98&cgid=SS20-Main-Collection')
    return x

test_furla()
t.start()

Он работает правильно, единственная проблема в том, что я не знаю, как поймать это возвращение на сторона тестера. Выход из паука ['FURLA SLEEK', '250.00', '€'].

1 Ответ

1 голос
/ 22 февраля 2020

Если вам нужен доступ к предметам, полученным от паука, я, вероятно, использовал бы для своей работы сигналы , в частности сигнал item_scraped. Адаптируя ваш код, он должен выглядеть примерно так:

from scrapy import signals
# other imports and stuff

t = CrawlerProcess()

def item_scraped(item, response, spider):
    # do something with the item

def test_furla():
    # we need Crawler instance to access signals
    crawler = t.create_crawler(Furla)
    crawler.signals.connect(item_scraped, signal=signals.item_scraped)
    x = t.crawl(crawler, url='https://www.furla.com/pt/pt/eshop/furla-sleek-BAHMW64BW000ZN98.html?dwvar_BAHMW64BW000ZN98_color=N98&cgid=SS20-Main-Collection')
    return x

test_furla()
t.start()

Дополнительную информацию можно найти в документации CrawlerProcess . С другой стороны, если вам нужно будет работать со всем выводом паука, со всеми предметами, вам нужно будет накапливать предметы, используя вышеуказанный механизм, и работать с ними после завершения сканирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...