我的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)
答案 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