我正从其他语言转向Python,但不确定如何正确解决此问题。使用urllib2库,很容易设置代理并从站点获取数据:
import urllib2
req = urllib2.Request('http://www.voidspace.org.uk')
response = urllib2.urlopen(req)
the_page = response.read()
我的问题是,检索到的文本文件非常大(数百MB),并且连接经常有问题。该代码还需要捕获连接,服务器和传输错误(它将成为广泛使用的小型管道的一部分)。
谁能建议如何修改上面的代码,以确保代码自动重新连接n次(例如100次),并可能将响应分成多个块,以便更快,更可靠地下载数据?
我已经尽可能多地拆分了请求,因此现在必须确保检索代码尽可能的好。基于核心python库的解决方案是理想的。
也许库已经在执行上述操作了,在这种情况下,有什么方法可以改善大文件的下载?我正在使用UNIX,需要处理代理。
谢谢你的帮助。
您可以尝试这样的事情。它逐行读取文件并将其附加到文件中。它还会检查以确保您不会越过同一行。我还要编写另一个脚本,也可以按块执行。
import urllib2
file_checker = None
print("Please Wait...")
while True:
try:
req = urllib2.Request('http://www.voidspace.org.uk')
response = urllib2.urlopen(req, timeout=20)
print("Connected")
with open("outfile.html", 'w+') as out_data:
for data in response.readlines():
file_checker = open("outfile.html")
if data not in file_checker.readlines():
out_data.write(str(data))
break
except urllib2.URLError:
print("Connection Error!")
print("Connecting again...please wait")
file_checker.close()
print("done")
这是分块而不是按行读取数据的方法
import urllib2
CHUNK = 16 * 1024
file_checker = None
print("Please Wait...")
while True:
try:
req = urllib2.Request('http://www.voidspace.org.uk')
response = urllib2.urlopen(req, timeout=1)
print("Connected")
with open("outdata", 'wb+') as out_data:
while True:
chunk = response.read(CHUNK)
file_checker = open("outdata")
if chunk and chunk not in file_checker.readlines():
out_data.write(chunk)
else:
break
break
except urllib2.URLError:
print("Connection Error!")
print("Connecting again...please wait")
file_checker.close()
print("done")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句