urllib2.URLError: ‹urlopen error unknown url type: c›

Я использую приведенный ниже код для очистки содержимого XFN с веб-страницы http://ajaxian.com, но я получаю следующее ошибка:

    Traceback (most recent call last):  File      "C:\Users\Somnath\workspace\us.chakra.social.web.microformat\src\microformats_xfn_scrape.py", line 40, in <module>
page = urllib2.urlopen(URL)
  File "C:\Python27\lib\urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 394, in open
response = self._open(req, data)
  File "C:\Python27\lib\urllib2.py", line 417, in _open
'unknown_open', req)
  File "C:\Python27\lib\urllib2.py", line 372, in _call_chain
result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 1232, in unknown_open
raise URLError('unknown url type: %s' % type)
urllib2.URLError: <urlopen error unknown url type: c>

Мой код выглядит следующим образом:

'''
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

Я запускаю PyDev под Eclipse и использую Run As -> Python Run и устанавливаю конфигурацию времени выполнения с аргументом «http://ajaxian.com/». Кто-нибудь может подсказать, где я ошибаюсь?

Еще одна вещь: я прокомментировал два блока try в своем коде, потому что он выдавал ошибку undefined variable : item. Если я хочу повторно включить блоки try-except, должен ли я дать пустое определение переменной, элемента вне блоков try? Как я могу избавиться от этой проблемы?


person somnathchakrabarti    schedule 11.01.2013    source источник
comment
Выведите sys.argv[0] и убедитесь, что это не имя самого скрипта, если это так, используйте [1]   -  person Alex K.    schedule 11.01.2013
comment
как вы вызываете скрипт?   -  person Amyth    schedule 11.01.2013
comment
@AlexK: URL-адрес печати дал мне имя скрипта следующим образом: C:\Users\Somnath\workspace\us.chakra.social.web.microformat\src\microformats_xfn_scrape.py   -  person somnathchakrabarti    schedule 11.01.2013
comment
в этом случае sys.argv[0] = microformats_xfn_scrape.py, а не фактический URL   -  person Amyth    schedule 11.01.2013
comment
@Amyth: я использую PyDev под Eclipse и использую Run As --> Python Run   -  person somnathchakrabarti    schedule 11.01.2013
comment
Затем используйте [1] и см. stackoverflow.com/questions/5222408/   -  person Alex K.    schedule 11.01.2013
comment
@AlexK: Я понял! Я изменил sys.argv[0] на sys.argv[1], и это сработало. Спасибо   -  person somnathchakrabarti    schedule 11.01.2013
comment
У меня есть дополнительный вопрос о блоках try-except, которые прямо сейчас закомментированы, но я хочу повторно включить их.   -  person somnathchakrabarti    schedule 11.01.2013
comment
Тогда вы должны задать новый вопрос   -  person Alex K.    schedule 11.01.2013
comment
@AlexK: Это новый вопрос: stackoverflow.com/questions/14282577/   -  person somnathchakrabarti    schedule 11.01.2013


Ответы (1)


Как вы предложили, sys.argv[0] печатает путь к вашему скрипту, потому что вы называете свой скрипт как

python microformats_xfn‌​_scrape.py <some_argument>

и здесь индекс 0 в sys.argv — это имя скрипта, а не аргумент.

Что вам нужно сделать, так это вызвать ваш скрипт с параметром <url>, например:

python microformats_xfn‌​_scrape.py http://www.ajaxian.com/

и в вашем сценарии измените sys.argv[0] на sys.argv[1], поскольку индекс аргументов URL равен 1.

person Amyth    schedule 11.01.2013