2017-02-22 43 views
1

Как я могу отправить очищенные URL от одного паука до start_urls другого паука?Пропустить очищенные URL от одного паука до другого

В частности, я хочу запустить один паук, который получает список URL-адресов с XML-страницы. После того, как URL-адрес был получен, я хочу, чтобы они использовались другим пауком для очистки.

from scrapy.spiders import SitemapSpider 

class Daily(SitemapSpider): 
    name = 'daily' 
    sitemap_urls = ['http://example.com/sitemap.xml'] 

    def parse(self, response): 
     print response.url 

     # How do I send these URL's to another spider instead? 

     yield { 
      'url': response.url 
     } 
+0

Было бы более разумно, если бы вы сделали все это в одном пауке. Каковы ваши аргументы в пользу использования двух пауков? –

ответ

0

Напишите URL-адрес файла как строки. Прочитайте их из того же файла в другом пауке.

0

Почему вы хотите использовать разные пауки для такого требования?

У вас может быть только 1 паук, а затем вместо передачи URL другому пауку, только yield еще Request в вашем методе parse.

from scrapy.spiders import SitemapSpider 

class Daily(SitemapSpider): 
    name = 'daily' 
    sitemap_urls = ['http://example.com/sitemap.xml'] 

    def parse(self, response): 

     yield Request(url="URL here", callback=callback_function) 
+0

, например, паук A может специализироваться на конкретной структуре веб-сайта, а паук B может быть универсальным/специализированным для работы с другой структурой веб-сайта. Этот ответ вообще не отвечает на вопрос. – maestromusica

+0

@maestromusica имеет простое условие if-else для определения домена и использует различную логику для каждого веб-сайта – Umair

1

С первого паука вы можете сохранить URL в некоторых БД или отправить в какой-то очереди (Зерро, Кролик MQ, Redis), например, по трубопроводу.

Второй паук может получить URL с помощью метода - start_requests

class MySpider(scrapy.Spider): 
    name = 'myspider' 

    def start_requests(self): 
     urls = my_db.orm.get('urls'); 
     for url in urls: 
      yield scrapy.Request(url) 

Или URLs могут быть переданы индексировать из очереди брокера через cli или API. Или паук может быть просто запущен от брокера и запущен spider получить его url start_requests.

Действительно существует множество способов, как вы можете это сделать. Способ зависит от критериев, по которым вам нужно передавать URL-адреса от одного паука к другому.

Вы можете проверить этот проект: Scrapy-Cluster, Scrapy-Redis. Может быть, это то, что вы ищете.

 Смежные вопросы

  • Нет связанных вопросов^_^