通过API调用在scrapinghub托管的Scrapy项目中更新启动URL

时间:2017-11-01 07:56:43

标签: python api scrapy scrapinghub

我的Scrapy蜘蛛托管在scrapinghub。它通过运行spider API调用进行管理。 蜘蛛从呼叫到呼叫的唯一变化是开始网址列表。该列表可能从100个网址到几千个不等。在这种情况下更新起始网址的最佳方法是什么? 从我看到的SH API中没有直接选项。 我正在考虑使用url列表更新MySql,并在更新后发送简单的Run job API调用。 (将从MySql表生成启动URL)。 有关此类解决方案或其他选项的任何意见吗?

我目前的设置如下。

def __init__(self, startUrls, *args, **kwargs):

    self.keywords = ['sales','advertise','contact','about','policy','terms','feedback','support','faq']

    self.startUrls = startUrls

    self.startUrls = json.loads(self.startUrls)

    super(MySpider, self).__init__(*args, **kwargs)

def start_requests(self):

    for url in self.startUrls:

        yield Request(url=url)

1 个答案:

答案 0 :(得分:2)

您可以将参数传递给scrapy spider并在蜘蛛内部读取它们。

发送编码为JSON的URL列表,然后对其进行解码,现在解除请求。

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    // If I  commented I have your error
    implementation 'com.android.support:design:26.1.0'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

以下是您如何运行将此参数发送给您的蜘蛛。

class MySpider(scrapy.Spider):

    def __init__(self, startUrls, *args, **kwargs):

        self.startUrls = startUrls

        self.startUrls = json.loads(self.startUrls)

        super(MySpider, self).__init__(*args, **kwargs)


    def start_requests(self):

        for url in self.startUrls:

            yield Request(url=url ... )

您的curl -u APIKEY: https://app.scrapinghub.com/api/run.json -d project=PROJECT -d spider=SPIDER -d startUrls="JSON_ARRAY_OF_LINKS_HERE" 文件应该是这样的

scrapinghub.yml