如何用Python从网址下载所有文件?
我想从一个网页上下载所有的文件,实际上是所有的图片文件。我发现'urllib'这个模块正好可以满足我的需求。这个模块似乎有一个方法可以下载文件,只要你知道文件名,但我并不知道。
urllib.urlretrieve('http://www.example.com/page', 'myfile.jpg')
有没有什么方法可以下载网页上的所有文件,并且可能返回一个文件列表呢?
1 个回答
7
这里有一个简单的例子,可以帮助你开始使用BeautifulSoup来做这类事情。你只需要给这个脚本一个网址,它就会打印出那个页面中所有图片的链接,这些链接是在标签的
jpg
或png
结尾的:
import sys, urllib, re, urlparse
from BeautifulSoup import BeautifulSoup
if not len(sys.argv) == 2:
print >> sys.stderr, "Usage: %s <URL>" % (sys.argv[0],)
sys.exit(1)
url = sys.argv[1]
f = urllib.urlopen(url)
soup = BeautifulSoup(f)
for i in soup.findAll('img', attrs={'src': re.compile('(?i)(jpg|png)$')}):
full_url = urlparse.urljoin(url, i['src'])
print "image URL: ", full_url
接下来,你可以使用urllib.urlretrieve
来下载每一张由full_url
指向的图片。不过在这个阶段,你需要决定给这些图片起什么名字,以及下载后的图片该怎么处理,这些在你的问题里没有说明。