0

以下のコードを使用して、Webページ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

コードに2つのtryブロックがあり、未定義の変数:itemというエラーが発生しています。try-exceptブロックを再度含める場合、tryブロックの外側にある変数の空白の定義を指定する必要がありますか?

PS:それは本に続く標準的なコードであることに注意してください。そして、私は彼らがそのような些細な間違いをしなかっただろうと期待しています。ここで何か問題がありますか?

4

3 に答える 3

2

ロードに失敗したURLを印刷したい場合は、に変更してみてくださいprint 'Failed to fetch ' + URL。あなたは実際にはitemどこにも定義していないので、Pythonはあなたが何を意味するのかわかりません:

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

そして、2番目のブロックでもに変更itemURLます(表示するエラーがコンテンツではなくURLを表示すると仮定します)。

try:
    soup = BeautifulSoup(page)
except HTMLParser.HTMLParseError:
    print 'Failed to parse ' + URL
于 2013-01-11T16:37:51.300 に答える
2
print 'Failed to fetch ' + item

アイテムはどこにも定義されていません。そこにURLを印刷したかったと思います。

Pythonチュートリアルによる

変数を使用する前に、変数を「定義」(値を割り当てる)する必要があります。そうしないと、エラーが発生します。

于 2013-01-11T16:38:06.803 に答える
0

変数'item'を定義していません。それがエラーの原因です。変数を使用する前に、変数を定義する必要があります。

于 2013-01-11T16:51:08.393 に答える