0

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

我目前的设置如下。

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)
4

1 回答 1

2

您可以将参数传递给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
于 2017-11-01T11:33:55.003 回答