错误:引发IOError(e.errno,e.strerror,e.filename)

时间:2013-09-03 07:03:26

标签: python python-2.7 web-crawler

我编码下载一些网站。但它无法正常运行

可以下载页面,但不打印“下载完成”,而是打印错误如下:

Traceback (most recent call last):
  File "F:\Copy\Desktop\gethanhan.py", line 28, in <module>
    con = urllib.urlopen(my_url[j]).read()
  File "C:\Python27\lib\urllib.py", line 87, in urlopen
    return opener.open(url)
  File "C:\Python27\lib\urllib.py", line 208, in open
    return getattr(self, name)(url)
  File "C:\Python27\lib\urllib.py", line 463, in open_file
    return self.open_local_file(url)
  File "C:\Python27\lib\urllib.py", line 477, in open_local_file
    raise IOError(e.errno, e.strerror, e.filename)
IOError: [Errno 2] : ''

我测试了几个小时。但我仍然找不到问题。这是代码:

......
#use a list which have urls to download url pages
j = 0
while j<50:
    con = urllib.urlopen(my_url[j]).read()
    filename = my_url[j][-26:]
    print 'Downloading'
    full_path ='F:/Copy/Desktop/kankan/' + str(j) + '.html'

    #ERROR appears in here:
    open(full_path,'w+').write(con) 
    j += 1
else:
    print 'Download finished'

2 个答案:

答案 0 :(得分:1)

您需要创建目录F:/Copy/Desktop/kankan才能使其生效。

使用w+打开文件为您创建目录。它只表示您要打开一个文件进行读写,并且应该先将其清除(截断)。

如果您还需要创建父目录,请使用os.makedirs() function

对于while循环,我会完全放弃else:。只需改为print 'Download finished'行。

您的第二个错误是将URL作为本地文件打开。检查URL,它指向硬盘上不存在的文件。

答案 1 :(得分:0)

File "C:\Python27\lib\urllib.py", line 87, in urlopen

我认为连接被远程主机强行关闭[kankan.com]。 您可以捕获所有异常:

try:
    open(full_path,'w+').write(con) 
except URLError as e:
    print(e.reason)
except:
    print("Unknown Error")