1

我有以下代码(gdaten[n][2] 给出一个 URL,n 是索引):

    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 的链接?为什么 except 不起作用?我的错在哪里? MyHTMLParser像这样将网站上找到的链接附加到 gdaten[[stuff,stuff, link][stuff,stuff, link]

4

1 回答 1

3

这是一个错误。

换句话说,np不同步。

要解决此问题,请n在设置之前添加一个p

为什么这不起作用?

假设n在开始时设置为零(可以从 开始42,没关系),假设 gdaten 的布局如下:

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

在检查第一个 while 条件后,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是两个,所以打开的 urlgdaten[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())

...
于 2013-10-24T18:43:21.957 回答