2013-10-24 98 views
1

我有以下代碼(gdaten [N] [2]給出了一個URL,n爲指數):python:urlParse錯誤?解析器的Python 3

try: 
     p=urlparse(gdaten[n][2]) 
     while p.scheme == "javascript" or p.scheme == "mailto": 
      p=urlparse(gdaten[n][2]) 
      print(p," was skipped (", gdaten[n][2],")") 
      n += 1 
     print ("check:", gdaten[n][2]) 
     f = urllib.request.urlopen(gdaten[n][2]) 
     htmlcode = str(f.read()) 
     parser = MyHTMLParser(strict=False) 
     parser.feed(htmlcode) 

    except urllib.error.URLError: 
     #do some stuff 
    except IndexError: 
     #do some stuff 
    except ValueError: 
     #do some stuff 

現在我有以下錯誤:

urllib.error.URLError: <urlopen error unknown url type: javascript> 

在第8行。這怎麼可能?我認爲與while循環我跳過所有這些計劃的JavaScript鏈接?爲什麼除了不工作?我的錯在哪裏? MyHTMLParser追加在網站上找到的鏈接到gdaten那樣[[stuff,stuff, link][stuff,stuff, link]

+0

那不是你的代碼的權利真正的縮進?另外,你能告訴我們更多的代碼嗎? – yuvi

回答

3

這是關閉了一個錯誤。

換句話說,np不同步。

要解決此問題,請在設置p之前將其添加到n

爲什麼不能正常工作?

假設n在開始設置爲零(可以在42開始,沒關係),讓我們說gdaten的佈局,像這樣:

gdaten[0][2] = "javascript://blah.js" 
gdaten[1][2] = "http://hello.com" 
gdaten[2][2] = "javascript://moo.js" 

在檢查也先條件,P .scheme是'javascript',所以我們進入循環。 p再次被設置爲urlparse("javascript://blah.js")並且n被增加到1.由於我們再次檢查urlparse("javascript://blah.js"),我們再次繼續進入循環。

p現在被設置爲urlparse("http://hello.com")n被設置爲2

由於urlparse("http://hello.com")通過檢查,while循環結束。

同時,由於n是二,是被打開的網址是gdaten[2][2]這是"javascript://moo.js"

代碼修復

try: 
    p=urlparse(gdaten[n][2]) 
    while p.scheme == "javascript" and p.scheme == "mailto" and not p.scheme: 
     print(p," was skipped (", gdaten[n][2],")") 

     # Skipping to the next value 
     n += 1 
     p=urlparse(gdaten[n][2]) 

    print ("check:", gdaten[n][2]) 
    f = urllib.request.urlopen(gdaten[n][2]) 
    htmlcode = str(f.read()) 

... 
+0

在你回答之前試過了10秒 – inetphantom