from urllib.request import urlretrieve
IMAGE_URL = "https://morvanzhou.github.io/static/img/description/learning_step_flowchart.png"
FILE_URL = "./img/image1.png"
urlretrieve(IMAGE_URL, FILE_URL)
- 使用 request
如果要下载的是大文件, 比如视频等. requests 能下一点, 保存一点, 而不是要全部下载完才能保存去另外的地方. 这就是一个 chunk 一个 chunk 的下载. 使用 r.iter_content(chunk_size) 来控制每个 chunk 的大小, 然后在文件中写入这个 chunk 大小的数据.
r = requests.get(IMAGE_URL, stream=True) # stream loading
with open('./img/image3.png', 'wb') as f:#with open也是打开文件的一种方法,wh是用二进制打开;with open省去了文件的关闭操作,更加方便
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)
- 小练习:下载美图
规律:图片链接都存在于 img_list 的这种 的中。
做法:先找带有 img_list 的这种 , 然后在 里面找 .
from bs4 import BeautifulSoup
import requests
URL = "http://www.nationalgeographic.com.cn/animals/"
html = requests.get(URL).text
soup = BeautifulSoup(html, 'lxml')
img_ul = soup.find_all('ul', {"class": "img_list"})
for ul in img_ul:
print(ul)
print("------------------------")
for ul in img_ul:
imgs = ul.find_all('img')
for img in imgs:
url = img['src']
r = requests.get(url, stream = True)
image_name = url.split('/')[-1]
with open('./img/%s' % image_name, 'wb') as f:
for chunk in r.iter_content(chunk_size=128):
f.write(chunk)
print("saved %s" % image_name)