2013-01-11 82 views
1

我使用下面的代碼來湊了從網頁內容XFN http://ajaxian.com 但我蓋特下面的錯誤:urllib2.URLError:<錯誤的urlopen未知的URL類型:C>

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 

我運行Eclipse下的PyDev和使用運行方式 - > Python的運行,並設置與參數「http://ajaxian.com/」運行時配置。任何人都可以提出我錯在哪裏?

還有一件事:我已經評論了我的代碼中的兩個try塊,因爲它給出了一個錯誤undefined variable:item。如果我想重新包含try-except塊,我應該在try塊之外給變量的一個空白定義嗎?我怎樣才能擺脫這個問題?

+3

打印sys.argv中[ 0]並確保它不是腳本本身的名稱,如果這樣使用[1] –

+0

你怎麼調用腳本? – Amyth

+0

@AlexK:打印URL給了我腳本的名稱如下:C:\ Users \ Somnath \ workspace \ us.chakra.social.web.microformat \ src \ microformats_xfn_scrape.py – somnathchakrabarti

回答

4

如你所說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