2014-07-22 82 views
0

我正在試驗http://robobrowser.readthedocs.org/en/latest/readme.html,一個基於美麗的湯和請求庫的新的Python庫。我目前正在使用它來打開一系列頁面並將響應保存到列表中供以後解析。在我的調試器列表的樣子:InvalidSchema沒有找到連接適配器,在Django錯誤

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 ' 

我在做什麼錯?

+0

請出示完整回溯 – Alasdair

+0

你是如何產生的請求?您可能必須將協議包含在請求中。 'http:// www.google.com' – karthikr

+0

我做了一些編輯。 - 賬單 – user61629

回答

3

看起來好像pages是Response對象的列表,並且您在每個響應的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") 
+0

感謝您的解釋 – user61629

2

這是Robobrowser中的一個錯誤(看來)。它可能正在尋找<a href="...">Link Name</a>,只是採取什麼在"..."部分。基於相關的RFC(特別是3986),這可以是//example.com/path/to/resourcehttp://example.com/path/to/resource或者只是/path/to/resource。你所看到的是它找到了一條只有路徑段/index/,它假定它可以使用它。什麼robobrowser應該做什麼(這是什麼瀏覽器做)正在確定什麼完整的URI是基於RFC 3986第5節。幸運的是,他們會很快有一個圖書館,將能夠爲他們做到這一點。

+0

謝謝,哪個庫? – user61629

+0

它還沒有完成,但圖書館是unoriginally標題rfc3986。它在PyPI上。 –

+0

謝謝,我會尋找它。 – user61629

相關問題