簡體   English   中英

從一個蜘蛛到另一個蜘蛛的不合格產量請求

[英]Scrapy yield request from one spider to another

我有以下代碼:

#FirstSpider.py
class FirstSpider(scrapy.Spider):

    name = 'first'
    start_urls = ['https://www.basesite.com']
    next_urls = []

    def parse(self, response):
        for url in response.css('bunch > of > css > here'):
        self.next_urls.append(url.css('more > css > here'))
        l = Loader(item=Item(), selector=url.css('more > css'))
        l.add_css('add', 'more > css')
        ...
        ...
        yield l.load_item()
        for url in self.next_urls:
            new_urls = self.start_urls[0] + url
            yield scrapy.Request(new_urls, callback=SecondSpider.parse_url)

#SecondSpider.py
class SecondSpider(scrapy.Spider):

    name = 'second'
    start_urls = ['https://www.basesite.com']


    def parse_url(self):
        """Parse team data."""
        return self
        # self is a HtmlResponse not a 'response' object


    def parse(self, response):
        """Parse all."""
        summary = self.parse_url(response)
        return summary

#ThirdSpider.py
class ThirdSpider(scrapy.Spider):
    # take links from second spider, continue:

我希望能夠將在Spider 1中抓取的網址傳遞給Spider 2(使用其他腳本)。 我很好奇為什么執行此操作時,“響應”是HtmlResponse而不是response對象(當執行與Spider 1相同的類中的方法類似的操作時;我沒有這個問題)

我在這里想念什么? 我如何將原始回復傳遞給第二只蜘蛛? (從第二個到第三個,等等。?)

您可以將Redis用作所有蜘蛛之間的共享資源https://github.com/rmax/scrapy-redis

  • 運行所有N個蜘蛛(不要在空閑狀態下關閉),因此它們中的每個蜘蛛都將連接到相同的Redis並從那里等待任務(URL,請求標頭);

  • 作為副作用,使用特定鍵(Y_spider名稱)將任務數據從X_spider推送到Redis。

那使用繼承呢? “解析”函數名稱應不同。 如果您的第一個蜘蛛繼承自第二個蜘蛛,它將能夠將回調設置為self.parse_function_spider2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM