如何用Python从网址下载所有文件?

6 投票
1 回答
8329 浏览
提问于 2025-04-17 03:28

我想从一个网页上下载所有的文件,实际上是所有的图片文件。我发现'urllib'这个模块正好可以满足我的需求。这个模块似乎有一个方法可以下载文件,只要你知道文件名,但我并不知道。

urllib.urlretrieve('http://www.example.com/page', 'myfile.jpg')

有没有什么方法可以下载网页上的所有文件,并且可能返回一个文件列表呢?

1 个回答

7

这里有一个简单的例子,可以帮助你开始使用BeautifulSoup来做这类事情。你只需要给这个脚本一个网址,它就会打印出那个页面中所有图片的链接,这些链接是在标签的属性里,并且以jpgpng结尾的:

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指向的图片。不过在这个阶段,你需要决定给这些图片起什么名字,以及下载后的图片该怎么处理,这些在你的问题里没有说明。

撰写回答