【发布时间】:2012-10-24 10:12:19
【问题描述】:
我使用 scrapy 编写了一个爬虫,它会向不同的站点发出一大堆 HtmlXPathSelector 请求。在(异步)满足每个请求后,它会在 .csv 文件中创建一行数据。不可能看到最后满足哪个请求,因为如果还没有提取数据,则重复请求(有时它会丢失几次数据)。即使我从一个整洁的列表开始,输出也很混乱,因为这些行是在提取数据后立即写入的。
现在我想根据一列对该列表进行排序,但在完成每个请求之后。 'spider_close'信号可以用来触发真正的函数吗?如下,我尝试将信号与调度程序连接,但这个函数似乎只打印出东西,而不是使用变量甚至调用其他功能。
def start_requests(self)
... dispatcher.connect(self.spider_closed, signal=signals.engine_stopped) ....
def spider_closed(spider):
print 'this gets printed alright' # <-only if the next line is omitted...
out = self.AnotherFunction(in) # <-This doesn't seem to run
【问题讨论】:
-
我认为您可以将多个函数附加到一个信号上。这会解决您的问题吗?
-
实际上,您可以将函数链接到信号...我相信我的实际问题是“scrapy”的结构 - 这是通过创建一个 .py 文件来解决的首先是spider,然后对输出文件进行排序。这非常有帮助:snipplr.com/view/67012/…
-
不应该 dispatcher.connect(...) 在 __init__() 而不是 start_requests() 中?
标签: python signals scrapy web-crawler