如何在一个混乱的蜘蛛中运行用户定义的函数



既然我们用自己的终端命令运行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。这只是一个例子,请不要只针对这段代码给出具体的解决方案,而是给出可以在任何情况下使用的解决方案。

默认情况下,Scrapy执行start_requestsparse方法。您可以使用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)

最新更新