0

我正在使用以下代码从网页http://ajaxian.com抓取 XFN 内容, 但出现未定义变量错误:

我的代码如下:

'''
Created on Jan 11, 2013

@author: Somnath
'''
# Scraping XFN content from a web page
# -*-coding: utf-8 -*-

import sys
import urllib2
import HTMLParser
from BeautifulSoup import BeautifulSoup

# Try http://ajaxian.com
URL = sys.argv[0]

XFN_TAGS = set([
            'colleague',
            'sweetheart',
            'parent',
            'co-resident',
            'co-worker',
            'muse',
            'neighbor',
            'sibling',
            'kin',
            'child',
            'date',
            'spouse',
            'me',
            'acquaintance',
            'met',
            'crush',
            'contact',
            'friend',
            ])


try:
    page = urllib2.urlopen(URL)
except urllib2.URLError:
    print 'Failed to fetch ' + item

try:
    soup = BeautifulSoup(page)
except HTMLParser.HTMLParseError:
    print 'Failed to parse ' + item

anchorTags = soup.findAll('a')

for a in anchorTags:
    if a.has_key('rel'):
        if len(set(a['rel'].split()) & XFN_TAGS) > 0:
            tags = a['rel'].split()
            print a.contents[0], a['href'], tags

我的代码中有两个 try 块,它给出了一个错误 undefined variable : item. 如果我想重新包含 try-except 块,我应该在 try 块之外给出变量、项目的空白定义吗?

PS:请注意,这是一本书的标准代码。而且我希望他们不会犯如此微不足道的错误。我这里有什么问题吗?

4

3 回答 3

2
print 'Failed to fetch ' + item

item 没有在任何地方定义。我猜你想在那里打印 URL。

根据python教程

变量必须先“定义”(赋值)才能使用,否则会出错:

于 2013-01-11T16:38:06.803 回答
2

假设您要打印加载失败的 URL,请尝试将其更改为print 'Failed to fetch ' + URL. 你实际上item并没有在任何地方定义,所以 Python 不知道你的意思:

try:
    page = urllib2.urlopen(URL)
except urllib2.URLError:
    print 'Failed to fetch ' + URL

在您的第二个块中,也更改itemURL(假设您要显示的错误显示的是 URL 而不是内容)。

try:
    soup = BeautifulSoup(page)
except HTMLParser.HTMLParseError:
    print 'Failed to parse ' + URL
于 2013-01-11T16:37:51.300 回答
0

您没有定义变量“项目”。这就是导致错误的原因。您必须在使用变量之前定义它。

于 2013-01-11T16:51:08.393 回答