【问题标题】:Providing url for spider using scrapyd api使用 scrapyd api 为蜘蛛提供 url
【发布时间】:2014-08-24 07:30:45
【问题描述】:

我尝试了类似的方法:

payload = {"project": settings['BOT_NAME'],
             "spider": crawler_name,
             "start_urls": ["http://www.foo.com"]}
response = requests.post("http://192.168.1.41:6800/schedule.json",
                           data=payload)

当我检查日志时,我得到了这个错误代码:

File "/usr/lib/pymodules/python2.7/scrapy/spider.py", line 53, in make_requests_from_url
    return Request(url, dont_filter=True)
  File "/usr/lib/pymodules/python2.7/scrapy/http/request/__init__.py", line 26, in __init__
    self._set_url(url)
  File "/usr/lib/pymodules/python2.7/scrapy/http/request/__init__.py", line 61, in _set_url
    raise ValueError('Missing scheme in request url: %s' % self._url)
exceptions.ValueError: Missing scheme in request url: h

好像只有“http://www.foo.com”的第一个字母被用作request.url,我真的不知道为什么。

更新

也许 start_urls 应该是一个字符串而不是一个包含 1 个元素的列表,所以我也尝试了:

"start_urls": "http://www.foo.com"

"start_urls": [["http://www.foo.com"]]

只是为了得到同样的错误。

【问题讨论】:

    标签: python http scrapy scrapyd


    【解决方案1】:

    您可以修改您的蜘蛛以接收url 参数并将其附加到start_urls 上的init

    class MySpider(Spider):
    
        start_urls = []
    
        def __init__(self, *args, **kwargs):
            super(MySpider, self).__init__(*args, **kwargs)
            self.start_urls.append(kwargs.get('url'))
    
        def parse(self, response):
            # do stuff
    

    您的 payload 现在将是:

    payload = {
        "project": settings['BOT_NAME'],
        "spider": crawler_name,
        "url": "http://www.foo.com"
    }
    

    【讨论】:

    • 我最初想要这个,所以我不必重写 CrawlSpider 下的许多方法,它不够灵活,无法在我想要的时候停止,所以我决定重写它,但是你的答案看起来非常正确,所以我会接受而无需测试。最后,你能告诉我url没有通过的原因吗?我试图挖掘代码,但它对我来说太复杂了。
    • start_urls 在应该是字符串列表时变成了字符串。在基础Spiderstart_requests 函数中,start_urls 中的 url 通过使用 for 循环(即for url in self.start_urls)进行迭代,当start_urls 是字符串而不是字符串列表时,它会失败,因为它获取一个字符而不是一个有效的 url。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多