【问题标题】:Use Scrapyd with arguments使用带有参数的 Scrapyd
【发布时间】:2016-03-10 10:04:27
【问题描述】:

我正在使用 Scrapyd 将 scrapy 用作 web 服务。

我想使用带有如下参数的 curl 命令:

curl http://myip:6800/schedule.json -d project=default -d spider=myspider -d domain=www.google.fr

但是我不知道如何在爬虫中获取参数域。

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class MyItem(Item):
    url = Field()

class HttpbinSpider(CrawlSpider):

    name = "expired"
    start_urls = [domain]

有时我需要在参数中传递一个域或多个域

谢谢!

【问题讨论】:

    标签: python web-scraping scrapy scrapyd


    【解决方案1】:

    由于scrapy中缺少功能,这是不可能的。

    用户通常通过序列化 curl 的参数来解决这个问题 然后在蜘蛛的 init() 中反序列化。

    curl http://myip:6800/schedule.json -d project=default -d spider=myspider -d domains='["www1.example.com", "www2.example.com"]'
    

    代码:

    class MySpider(Spider):
        def __init__(self, domains=None):
            domains = json.loads(domains)
            # do something with domains...
    

    【讨论】:

      【解决方案2】:
      1. class YourSpider(scrapy.Spider):
            def __int__(self, *args, **kwargs):
                super(YourSpider, self).__init__(*args, **kwargs)
        
      2. curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
        
      3. 输入:print(spider.arg1),输出:val1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-08
        • 2020-08-19
        • 1970-01-01
        • 2021-08-30
        • 2015-11-07
        • 1970-01-01
        • 2013-02-07
        • 1970-01-01
        相关资源
        最近更新 更多