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

Update start urls at scrapinghub hosted Scrapy project via API call

我的 Scrapy 蜘蛛托管在 scrapinghub。它通过 运行 spider API 调用进行管理。 蜘蛛从调用到调用唯一改变的是起始 url 列表。该列表可能从 100 个 url 到几千个不等。在这种情况下更新起始 url 的最佳方法是什么? 据我所知,在 SH API 中没有直接选项。 我正在考虑使用 URL 列表更新 MySql,更新后发送简单的 运行 作业 API 调用。 (起始网址将从 MySql table 生成)。 对此类解决方案或其他选项有何评论?

我目前的设置如下。

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)

您可以将参数传递给 scrapy spider 并在您的 spider 中读取它们。

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

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 文件应该是这样的

projects:
  default: 160868