我对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”)。但是爬取单个站点总是有效的。这种行为的原因可能是什么?