按照您发布的示例:
import urllib2
from bs4 import BeautifulSoup
url = "http://www.example.com/downlaod"
site = urllib2.urlopen(url)
html = site.read()
soup = BeautifulSoup(html)
list_urls = soup.find_all('a')
print list_urls[6]
因此,您接下来要获取的 URL 大概是list_urls[6]['href']
.
第一个技巧是这可能是一个相对 URL 而不是绝对的。所以:
newurl = list_urls[6]['href']
absurl = urlparse.urljoin(site.url, newurl)
此外,您只想获取具有正确扩展名的文件,因此:
if not absurl.endswith(extensions):
return # or break or whatever
但是一旦你决定了要下载的 URL,它并不比你最初的获取更难:
page = urllib2.urlopen(absurl)
html = page.read()
path = urlparse.urlparse(absurl).path
name = os.path.basename(path)
with open(name, 'wb') as f:
f.write(html)
主要是这样。
您可能想要添加一些东西,但如果是这样,您必须手动添加它们。例如:
- 查找带有建议文件名的 Content-disposition 标头,以代替 URL 的基本名称。
copyfile
from page
tof
而不是read
把整个事情都写进内存然后write
再写出来。
- 处理具有相同名称的现有文件。
- …</li>
但这是基础。