【问题标题】:Update start urls at scrapinghub hosted Scrapy project via API call通过 API 调用更新 scrapinghub 托管的 Scrapy 项目的启动 url
【发布时间】:2017-11-01 07:56:43
【问题描述】:

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

我目前的设置如下。

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)

【问题讨论】:

    标签: python api scrapy scrapinghub


    【解决方案1】:

    您可以将参数传递给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
    

    【讨论】:

    • 谢谢。这对于包含 10 个 url 的列表非常有效。但是如何处理 1000 个 url?
    • urls 数组中的键是什么?
    • @BillyJhon 只需使用您使用的任何编程语言创建一个 URL 列表/数组,然后将其编码为 JSON .. 编码后的 JSON 将如下所示... jsoneditoronline.org/?id=256353f25851ab72ef689ece443dd071 ...在 PHP 中,创建一个 URL 数组,然后执行 json_encode($array) ...
    • 知道了。谢谢。将您的答案标记为已接受。
    • 嘿。 shub deploy 时出现此错误。错误:部署失败(400):项目:non_field_errors。已将代码添加到原帖中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多