python - 使用 scrapyd api 为蜘蛛提供 url

标签 python http scrapy scrapyd

我试过类似的方法:

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

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

更新

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

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

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

只会得到同样的错误。

最佳答案

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

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 = {
    "project": settings['BOT_NAME'],
    "spider": crawler_name,
    "url": "http://www.foo.com"
}

关于python - 使用 scrapyd api 为蜘蛛提供 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469500/

相关文章:

python - 如何在 Scrapy 中使用 response.XPath 从多个标签中提取文本数据?

python - pyodbc 版本是什么?

python - 如何在python中不使用 "import"导入

http - 将请求路由到多个后端服务器Dropwizard和Elasticsearch

python - 未知命令 : crawl error

python - Scrapy 遵循之前的链接

python - 在 matplotlib.pyplot 图中使用传递的轴对象?

python - 如何在python中打印pygit对象的内容

http - HTTP 代理可以处理通过 HTTP/2 的入站 CONNECT 请求吗?

java - 带有 Signpost 和 Apache Commons HTTP 的 OAuth