【问题标题】:InvalidSchema No connection adapters were found for , error in djangoInvalidSchema 找不到连接适配器,django 中的错误
【发布时间】:2014-07-22 17:28:02
【问题描述】:

我正在试验http://robobrowser.readthedocs.org/en/latest/readme.html,这是一个基于美丽汤和请求库的新 python 库。我目前正在使用它打开一系列页面并将响应保存到列表中以供以后解析。我的调试器中的列表如下所示:

pages =   [<Response [200]>, <Response [200]> ....]

我通过让 robobrowser 对象循环浏览一些页面并保存响应来生成此列表:

while pageRight:
    browser.follow_link(pageright[0])
    browser
    page = browser.response
    pages.append(page)
    pageRight= browser.select(".pageright")

以上部分似乎工作正常,但是当我尝试时:

ag = "myagent"
browser = RoboBrowser(user_agent=ag)

for page in pages:
    browser.open(page.content)
    for listing in browser.select('.listingInfo'): #a list
        pl = getParsedListing(listing)
        listings.append(pl)

在我的 django 索引文件中,出现错误:

InvalidSchema at /index/

No connection adapters were found for..

追溯:

Traceback:
File "C:\envs\r1\lib\site-packages\django\core\handlers\base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\envs\r1\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
  57.         return view_func(*args, **kwargs)
File "C:\envs\r1\masslist\ml1\views.py" in index
  29.         Sites = getSitesInArea(Area)
File "C:\envs\r1\masslist\ml1\views.py" in getSitesInArea
  91.         browser.open(page.content)
File "C:\envs\r1\lib\site-packages\robobrowser\browser.py" in open
  200.             verify=verify if verify is not None else self.verify,
File "C:\envs\r1\lib\site-packages\requests\sessions.py" in get
  468.         return self.request('GET', url, **kwargs)
File "C:\envs\r1\lib\site-packages\requests\sessions.py" in request
  456.         resp = self.send(prep, **send_kwargs)
File "C:\envs\r1\lib\site-packages\requests\sessions.py" in send
  553.         adapter = self.get_adapter(url=request.url)
File "C:\envs\r1\lib\site-packages\requests\sessions.py" in get_adapter
  608.         raise InvalidSchema("No connection adapters were found for '%s'" % url)    

Exception Type: InvalidSchema at /index/
Exception Value: No connection adapters were found for '

我做错了什么?

【问题讨论】:

  • 请显示完整的回溯
  • 您是如何生成请求的?您可能必须在请求中包含协议。 http://www.google.com
  • 我做了一些修改。 - 比尔

标签: python django beautifulsoup python-requests robobrowser


【解决方案1】:

看起来pages 是一个响应对象列表,而您在每个响应的content 属性上调用browser.open。但是open 方法接受一个 URL,而不是响应的内容。如果您希望打开 pages 列表中的每个页面,请尝试以下操作:

for page in pages:
    browser.open(page.url)
    ...

我相信这会奏效,但效率会很低,因为这意味着访问列表中的每个页面两次(一次在您的while pageRight 循环中,一次在您的for page in pages 循环中)。为了提高效率,您可以将两个循环合并为一个:

while pageRight:
    for listing in browser.select('.listingInfo'):
        pl = getParsedListing(listing)
        listings.append(pl)
    browser.follow_link(pageright[0])
    pageRight = browser.select(".pageright")

【讨论】:

  • 感谢您的解释
【解决方案2】:

这是 Robobrowser 中的一个错误(看起来)。它可能正在寻找 &lt;a href="..."&gt;Link Name&lt;/a&gt; 并仅获取 "..." 部分中的内容。根据相关的 RFC(特别是 3986),这可以是 //example.com/path/to/resourcehttp://example.com/path/to/resource 或只是 /path/to/resource。你看到的是它发现了一个只有/index/ 的路径段,它假设它可以使用它。 robobrowser 应该做的是(browsers 所做的)是根据 RFC 3986 第 5 节确定完整的 URI 是什么。幸运的是,他们很快就会有一个库能够支持为他们做这件事。

【讨论】:

  • 尚未完成,但该库的原始名称为 rfc3986。它在 PyPI 上。
  • 谢谢,我去找找。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
相关资源
最近更新 更多