在python中从http服务器下载文件

cel*_*lar 4 python automation

使用urllib2,我们可以从Web服务器获取http响应.如果该服务器只保存文件列表,我们可以解析文件并单独下载.但是,我不确定解析文件的最简单,最pythonic的方法是什么.

当您获得通用文件服务器列表的完整http响应时,通过urllib2的urlopen()方法,我们如何能够整齐地下载每个文件?

cgo*_*lke 9

Urllib2可能可以检索文件列表.对于下载大量二进制文件,PycURL http://pycurl.sourceforge.net/是更好的选择.这适用于我的基于IIS的文件服务器:

import re
import urllib2
import pycurl

url = "http://server.domain/"
path = "path/"
pattern = '<A HREF="/%s.*?">(.*?)</A>' % path

response = urllib2.urlopen(url+path).read()

for filename in re.findall(pattern, response):
    fp = open(filename, "wb")
    curl = pycurl.Curl()
    curl.setopt(pycurl.URL, url+path+filename)
    curl.setopt(pycurl.WRITEDATA, fp)
    curl.perform()
    curl.close()
    fp.close()
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用urllib.urlretrieve(在Python 3.x:urllib.request.urlretrieve中):

import urllib
urllib.urlretrieve('http://site.com/', filename='filez.txt')
Run Code Online (Sandbox Code Playgroud)

这应该是工作:)

这是一个可以做同样事情的功能(使用urllib):

def download(url):
    webFile = urllib.urlopen(url)
    localFile = open(url.split('/')[-1], 'w')
    localFile.write(webFile.read())
    webFile.close()
    localFile.close()
Run Code Online (Sandbox Code Playgroud)


Ale*_*dal 3

您能保证您请求的 URL 是目录列表吗?如果是这样,你能保证目录列表的格式吗?

如果是这样,您可以使用lxml解析返回的文档并查找保存文件路径的所有元素,然后迭代这些元素并下载每个文件。