2014-07-22 2 views
0

아름다운 수프 및 요청 라이브러리를 기반으로하는 새로운 파이썬 라이브러리 http://robobrowser.readthedocs.org/en/latest/readme.html을 실험하고 있습니다. 나는 현재 일련의 페이지를 열어 나중에 구문 분석을 위해 응답을 목록에 저장하는 데 사용하고 있습니다. 내가 응답 일부 페이지를 통해 robobrowser 객체 루프를함으로써이 목록을 생성하고 저장InvalidSchema django에 대한 연결 어댑터가 없습니다.

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

:

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) 

, 나는 오류를 받고 있어요

역 추적 : 내가 잘못

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을 사용합니다.

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

내가 그 작동합니다 생각하지만, (한 번에 두 번 목록에 각 페이지를 방문 의미하기 때문에, 비효율적이 될 것 : 당신이 당신의 pages 목록의 각 페이지를 엽니 다 찾고 있다면,이 시도 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/resource 또는 http://example.com/path/to/resource 또는 /path/to/resource 일 수 있습니다. 당신이보고있는 것은 단지 경로 세그먼트가 /index/ 인 무언가를 발견했으며 단지 그것을 사용할 수 있다고 가정합니다. robobrowser가 수행해야하는 작업 (브라우저 인)은 전체 URI가 RFC 3986의 섹션 5를 기반으로 결정됩니다. 다행히도이를 위해 다행히도이를 수행 할 수있는 라이브러리가 있습니다. .

+0

감사합니다, 어떤 도서관? – user61629

+0

끝나지 않았지만 라이브러리의 원래 이름은 rfc3986입니다. PyPI에 있습니다. –

+0

고마워, 내가 찾아 볼게. – user61629

관련 문제