1

我在 BeautifulSoup(python)中的 navigablestrings 和 unicode 有一些问题。

基本上,我正在解析来自 youtube 的四个结果页面,并将顶部结果的扩展名(在 youtube.com/watch?= 之后的 url 结尾)放入列表中。

然后,我在其他两个函数中循环列表,其中一个会引发此错误:TypeError: 'NavigableString' object is not callable. 然而,另一个说TypeError: 'unicode' object is not callable。两者都使用相同的字符串。

我在这里做错了什么?我知道我的解析代码可能并不完美,我同时使用 BeautifulSoup 和正则表达式。过去,每当我遇到 NavigableString 错误时,我都会抛出一个“.encode('ascii', 'ignore') 或简单的 str(),这似乎有效。任何帮助将不胜感激!

    for url in urls:
        response = urllib2.urlopen(url)
        html = response.read()
        soup = BeautifulSoup(html)
        link_data = soup.findAll("a", {"class":"yt-uix-tile-link result-item-translation-title"})[0]
        ext = re.findall('href="/(.*)">', str(link_data))[0]
        if isinstance(ext, str):
            exts.append('http://www.youtube.com/'+ext.replace(' ',''))

接着:

    for ext in exts:
        description = description(ext)
        embed = embed(ext)

我只添加了 isinstance() 行来尝试查看问题所在。当 'str' 更改为 'unicode' 时,exts 列表为空(意味着它们是字符串,而不是 unicode(甚至是可导航字符串?))。我很困惑...

4

2 回答 2

1

description = description(ext)在循环中的第一次迭代后用字符串替换函数。对embed.

于 2012-06-10T04:58:04.597 回答
0
for ext in exts:
    description = description(ext)
    embed = embed(ext)

description()并且embed()是函数。例如

def description():  #this is a function
    return u'result'

然后

description = description(ext) 
#now description is a unicode object, and it is not callable.
#It is can't call like this description(ext) again

我认为这两个函数description()embed()是返回'NavigableString' object'unicode' object。那两个对象都不是callable

所以你应该替换这两行,例如:

for ext in exts:
    description_result = description(ext)
    embed_result = embed(ext)
于 2012-06-10T06:12:04.720 回答