这是事情,我正在执行一个脚本,该脚本从不同的站点下载文件。问题是我不知道为什么会引发此错误,而如果我在浏览器中输入相同的URL,则可以下载文件。另外,还有其他可以正常工作的网址。所以...这是代码:
import os
from bs4 import BeautifulSoup
import time
import urllib2
f = urllib2.Request(url)
f.add_header('User-Agent', 'Mozilla/5.0 Windows NT 6.3; WOW64; rv:34.0')
request = urllib2.urlopen(f)
data = request.read()
soup = BeautifulSoup(data, 'html.parser')
p_name = soup.find('h2', id="searchResults").contents[0]
if not os.path.exists(p_name):
os.makedirs(p_name)
for a in soup.find_all('a', href="#register"):
f = a["data-durl"]
#Following two lines just prepares file name
n = len(f.split("/"))
n_file = f.split("/")[n-1]
path_file = p_name+"\\"+n_file
if os.path.isfile(path_file):
print "Firmware already downloaded. skipping it"
else:
print "Downloading "+ path_file
link = urllib2.urlopen(f)
datos = link.read()
#print "[+] Downloading firmware %s" % n_file
#n_archivo = "Archivo"+str(b)+".zip"
with open(path_file, "wb") as code:
code.write(datos)
time.sleep(2)
这个网址将无法与此脚本一起使用:无法正常工作的网址,但是这个网址可以正常工作
希望您能够帮助我。
编辑:我添加了我为此使用的库。和堆栈跟踪,我发现了错误!问题是它尝试下载的文件名上有空格。使用f.replace(“”,“%20”)应该可以正常工作:)
您需要将文件名中的空格转换为空格的URL编码:%20
。为此,您可以使用以下命令在这两行之间添加一行str.replace()
:
print "Downloading "+ path_file
f = f.replace(' ', '%20')
link = urllib2.urlopen(f)
这将从URL下载:
http://www.downloads.netgear.com/files/GDC/ME101/ME101%20Software%20Utility%20Version%202.0.zip
而不是来自
http://www.downloads.netgear.com/files/GDC/ME101/ME101 Software Utility Version 2.0.zip
这是无效的,因为其中包含空格。
该URL在您的浏览器中仍然有效,因为当您输入带空格的URL时,浏览器会自动将其转换为%20
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句