1

我对scrapy还很陌生。我正在抓取一个提供网站列表的网站。我想抓取这些网站的某些页面。

示例:siteX.com 具有以下列表:

http://siteA.com
http://siteB.com
http://siteC.com

所有这些页面都有遵循相同结构的子站点,每个站点我需要两个额外的请求来获取它们的数据:

http://siteA.com/test/1
http://siteA.com/test/2
http://siteB.com/test/1
http://siteB.com/test/2
http://siteC.com/test/1
http://siteC.com/test/2

我可以通过使用以下代码的单个条目来实现这一点:

def parse(self, response):
    entry = response.css("list").extract()[0]
    details_page_link = prefix + entry
    request = scrapy.Request(details_page_link, callback=self.parse_subpage)
    request.meta["foo"] = foo
    yield request

def parse_subpage(self, response):
    foo = response.meta["foo"]
    foo["more"] = response.css("more").extract_first()

    link_to_sub_page = response.css("link").extract_first() 
    request = scrapy.Request(link_to_sub_page, callback=self.parse_sub_sub_page)

    request.meta["foo"] = foo
    yield request

def parse_sub_subpage(self, response):
    foo = response.meta["foo"]
    foo["fina"] = response.css("something").extract_first()
    yield foo

然后将 Foo 放入管道中的数据库中。我现在的问题是,当我遍历源网站上的列表时,并非所有项目都进入管道

def parse(self, response):
    for entry in response.css("div.container tbody 
        a::attr(href)").extract():
            details_page_link = prefix + entry
            request = scrapy.Request(details_page_link, callback=self.parse_subpage)
            request.meta["foo"] = foo
            yield request

不过这完全是随机的——它并不总是相同的站点,而且我在日志中看不到任何错误(“LOG_LEVEL”:“DEBUG”)。但是爬取单个站点总是有效的。这种行为的原因可能是什么?

4

0 回答 0