0

我正在尝试制作一个获取随机网站并计算元素的小程序。

这是我的错误:

Traceback (most recent call last):
  File "elements counter.py", line 23, in <module>
    if elem[1] == string:
TypeError: 'int' object is unsubscriptable

这是我的代码:

from urllib2 import Request, urlopen, URLError

print 'Fetching URL..'

try:
    html = urlopen(Request("http://www.randomwebsite.com/cgi-bin/random.pl"))
except URLError:
    html = urlopen(Request("http://www.randomwebsitemachine.com/random_website/"))

print 'Loading HTML..'

ellist = [(None,None),]
isel = False
string = ''

for char in html.read():
    if char == '<':
        isel=True
    elif isel:
        if char == ' ' or char == '>':
            if string in ellist:
                for elem in ellist:
                    if elem[1] == string:
                        elem[0] += 1
            else:
                ellist += (1,string)
            isel = False
            string = ''
        else:
            string += char

print sorted(ellist, key = lambda tempvar: tempvar[0])

html.close()
raw_input()

如果您在代码中发现更多错误,请指出。

4

1 回答 1

2

当你这样做

            ellist += (1,string)

            ellist.extend((1,string))

所以ellist看起来像

[(None, None), 1, string]

因此,当您到达for循环中的第二个元素时,它int不是tuple.

相反,做

            ellist.append((1,string))

或者,如果你真的想使用+=

            ellist += [(1,string)]

其余代码看起来基本正确,但请注意,您无法正确处理引号或 HTML 注释中的尖括号。如果要解析 HTML,请使用现有的众多 HTML 解析器之一,例如 Python 的 HTMLParser 模块、lxml 或 BeautifulSoup。

于 2012-04-05T15:52:44.130 回答