既然我们用自己的终端命令运行scrapy spider,我该如何运行自己定义的函数?
以下示例:
import scrapy
class Fcc(scrapy.Spider):
name = "fcc"
start_urls = ["http://freecodecamp.org/"]
def parse(self, response):
for link in response.css("a::attr(href)").getall():
yield {
"url": link,
}
def add(self):
with open("links.txt", "a") as f:
f.write(next(self.parse()))
因此,现在如果我通过传递以下命令从终端运行spider,它将只执行parse函数。那么,当我想运行add函数时,该如何运行呢?
scratch runspider fcc_spider.py
因为这将帮助我处理从任何网站抓取的数据。
Ps。这只是一个例子,请不要只针对这段代码给出具体的解决方案,而是给出可以在任何情况下使用的解决方案。
start_requests
或parse
方法。您可以使用def __init__
检查命令行参数并运行目标函数。
您可以通过在一个Scrapy回调中调用用户定义的函数来运行它们。
您可以在parse
方法内的for
循环之前或之后调用它(记住Scrapy的异步性质)。
您还可以为Spider定义一个构造函数,并将links.txt文件的内容传递给它。
以下是Scrapy文档中的一个示例:https://docs.scrapy.org/en/latest/topics/spiders.html#spider-自变量
在Python中,可以创建内部函数(函数中的函数)。
在另一个函数内部定义的函数称为内部函数或嵌套函数。在Python中,这类函数可以访问封闭函数中的名称。以下是如何在Python中创建内部函数的示例:
def outer_func():
def inner_func():
print("Hello, World!")
inner_func()
outer_func()
输出:
Hello, World!
在这段代码中,您在outer_func()中定义inner_func)来打印Hello,World!消息显示到屏幕。为此,在outer_func()的最后一行调用inner_func。这是用Python编写内部函数的最快方法。然而,内部函数提供了许多有趣的可能性,超出了您在本例中看到的范围。
点击此处阅读更多
实施示例
基于此,您可以在其中一个Scrapy函数中创建一个函数,并在该函数中调用它。
def parse(self, response):
def function_name(name):
to_return = "hello {}".format(name)
return to_return
#Some code here...
pharam = function_name(name)