InvalidSchema找不到连接适配器,django中的错误

时间:2014-07-22 17:28:03

标签: python django beautifulsoup python-requests robobrowser

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

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 '

我做错了什么?

2 个答案:

答案 0 :(得分:3)

看起来pages是一个Response对象列表,您在每个响应的browser.open属性上调用content。但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")

答案 1 :(得分:2)

这是Robobrowser中的一个错误(似乎)。它可能正在寻找<a href="...">Link Name</a>并且正在寻找"..."部分中的内容。根据相关的RFC(特别是3986),这可以是//example.com/path/to/resourcehttp://example.com/path/to/resource,也可以是/path/to/resource。您所看到的是它发现只有/index/路径段的内容,并假设它可以使用它。 robobrowser应该做什么(这是 browsers 做的)确定完整的URI是基于RFC 3986的第5部分。幸运的是,它们将很快就会有一个库为他们这样做。