在 Scrapy python 中将参数传递给 process.crawl

Posted

技术标签:

【中文标题】在 Scrapy python 中将参数传递给 process.crawl【英文标题】:Passing arguments to process.crawl in Scrapy python 【发布时间】:2016-03-26 17:47:03 【问题描述】:

我希望得到与此命令行相同的结果: scrapy crawl linkedin_anonymous -a first=James -a last=Bond -o output.json

我的脚本如下:

import scrapy
from linkedin_anonymous_spider import LinkedInAnonymousSpider
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

spider = LinkedInAnonymousSpider(None, "James", "Bond")
process = CrawlerProcess(get_project_settings())
process.crawl(spider) ## <-------------- (1)
process.start()

我发现 (1) 中的 process.crawl() 正在创建另一个 LinkedInAnonymousSpider,其中 first 和 last 都是 None (在 (2) 中打印),如果是这样,那么创建对象蜘蛛没有意义,以及如何是否可以先和最后将参数传递给 process.crawl()?

linkedin_anonymous:

from logging import INFO

import scrapy

class LinkedInAnonymousSpider(scrapy.Spider):
    name = "linkedin_anonymous"
    allowed_domains = ["linkedin.com"]
    start_urls = []

    base_url = "https://www.linkedin.com/pub/dir/?first=%s&last=%s&search=Search"

    def __init__(self, input = None, first= None, last=None):
        self.input = input  # source file name
        self.first = first
        self.last = last

    def start_requests(self):
        print self.first ## <------------- (2)
        if self.first and self.last: # taking input from command line parameters
                url = self.base_url % (self.first, self.last)
                yield self.make_requests_from_url(url)

    def parse(self, response): . . .

【问题讨论】:

【参考方案1】:

process.crawl 方法上传递蜘蛛参数:

process.crawl(spider, input='inputargument', first='James', last='Bond')

【讨论】:

但是这样我们也许不能通过-o output.json? @hAcKnRoCk ***.com/a/42301595 这里是如何配置输出文件【参考方案2】:

你可以很简单地做到这一点:

from scrapy import cmdline

cmdline.execute("scrapy crawl linkedin_anonymous -a first=James -a last=Bond -o output.json".split())

【讨论】:

【参考方案3】:

如果您有 Scrapyd 并且想要安排蜘蛛,请执行此操作

curl http://localhost:6800/schedule.json -d project=projectname -d spider=spidername -d first='James' -d last='Bond'

【讨论】:

以上是关于在 Scrapy python 中将参数传递给 process.crawl的主要内容,如果未能解决你的问题,请参考以下文章

可以在Python中将参数传递给函数对象吗?

在python 3中将参数传递给exec

在 python 3. 数字猜谜游戏中将许多参数传递给输入

在Python中将多个参数传递给pool.map()函数[重复]

如何从 python 脚本中将参数传递给 cmd.exe?

如何从 Git Bash 中将命令行参数传递给 Windows 应用程序?