Python,在Scrapy中传递数据

时间:2015-04-14 13:34:46

标签: python scrapy

我如何实际将数据传递给我的蜘蛛解析,让我们说变量名或临时。

class CSpider(scrapy.Spider):

    name = "s1"
    allowed_domains = ["abc.com"]
    temp = ""
    start_urls = [
        url.strip() for url in lists
    ]
    def parse(self, response):
        //How do i pass data into here, eg name, temp

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果您将temp变量定义为类级变量,则可以通过self.temp访问它。

如果您希望从命令行传递此内容,请参阅以下主题:

答案 1 :(得分:0)

正如 alecxe 回答的那样,您可以使用属性(类级变量)使变量或常量在类中的任何位置都可以访问,或者您也可以向方法(类的函数)parse 添加参数希望能够为来自类外部的参数赋值。

我会在这里尝试为您提供一个包含两种解决方案的代码示例。

使用属性:

class CSpider(scrapy.Spider):

    name = "s1"
    allowed_domains = ["abc.com"]
    temp = ""

    # Here is our attribute
    self.number_of_days_in_a_week = 7

    start_urls = [
        url.strip() for url in lists
    ]
    def parse(self, response):
        # It is now used in the method
        print(f"In a week, there is {self.number_of_days_in_a_week} days.")

如果需要,以下是将其作为其他参数传递的方法:

class CSpider(scrapy.Spider):

    name = "s1"
    allowed_domains = ["abc.com"]
    temp = ""
    start_urls = [
        url.strip() for url in lists
    ]
    def parse(self, what_you_want_to_pass_in):
        print(f"In a week, there is {what_you_want_to_pass_in} days.")

# We create an instance of the spider
spider1 = CSpider

# Then we use it's method with an argument
spider1.parse(7)

请注意,在第二个示例中,我从您的 response 方法中取回了 parse 参数,因为它更容易显示如何传递参数。尽管如此,如果您考虑整个 Scrapy 框架,您肯定可以使用此解决方案添加外部值。