4

私は次のようなものを試しました:

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"]]

同じエラーが発生するだけです。

4

1 に答える 1

3

スパイダーを変更して引数を受け取り、それをon にurl追加できます。start_urlsinit

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"
}
于 2014-08-25T08:35:22.237 に答える