首先找到网页的图片地址如
网址为:
https://i0.hdslb.com/bfs/face/03525d094e0e2a142d08181532d729615c18ec92.jpg
找到了这个网址, 我们就能开始下载了. 为了下载到一个特定的文件夹, 我们先建立一个文件夹吧. 并且规定这个图片下载地址.
import os
os.makedirs('./img/', exist_ok=True)
IMAGE_URL = "https://i0.hdslb.com/bfs/face/03525d094e0e2a142d08181532d729615c18ec92.jpg"
使用 urlretrieve
在 urllib 模块中, 提供了我们一个下载功能 urlretrieve. 使用起来很简单. 输入下载地址 IMAGE_URL
和要存放的位置. 图片就会被自动下载过去了.
from urllib.request import urlretrieve
urlretrieve(IMAGE_URL, './img/image1.png')
使用 request
而在 requests 模块, 也能拿来下东西. 下面的代码实现了和上面一样的功能, 但是稍微长了点. 但我们为什么要提到 requests 的下载呢? 因为使用它的另一种方法, 我们可以更加有效率的下载大文件.
import requests
r = requests.get(IMAGE_URL)
with open('./img/image2.png', 'wb') as f:
f.write(r.content)
所以说, 如果你要下载的是大文件, 比如视频等. 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:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)
有了这些知识的积累, 我们就能开始做一个小的实战练习, 去下载一些国家地理杂志的美图
网址为http://www.ngchina.com.cn/animals/
找到图片位置
找到这张图片的所在位置, 对比这类型的图片, 找到一种手段来筛选这些图片. 发现他们都存在于 img_list
的这种 <ul>
中.
而图片地址都是在 <img>
中.
<img src="http://image.ngchina.com.cn/2021/0125/20210125050736193.jpg">
现在我们有了思路, 先找带有 img_list
的这种 <ul>
, 然后在 <ul>
里面找 <img>
下载图片
有了思路, 现在我们就用 python 来下图吧. import BeautifulSoup 和 requests. 定义爬取的 url.
from bs4 import BeautifulSoup
import requests
URL = "http://www.ngchina.com.cn/animals/"
用 BeautifulSoup 找到带有 img_list
的这种 <ul>
,
html = requests.get(URL).text
soup = BeautifulSoup(html, 'lxml')
img_ul = soup.find_all('ul', {"class": "img_list"})
从 ul 中找到所有的 <img>
, 然后提取 <img>
的 src
属性, 里面的就是图片的网址啦. 接着, 就用之前在 requests 下载那节内容里提到的一段段下载.
for ul in img_ul:
imgs = ul.find_all('img')
for img in imgs:
url = img['src']
print(url)
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)
'''
http://image.ngchina.com.cn/2021/0205/20210205100918210.jpg
Saved 20210205100918210.jpg
http://image.ngchina.com.cn/2021/0201/20210201114911255.jpg
Saved 20210201114911255.jpg
http://image.ngchina.com.cn/2021/0129/20210129102132614.jpg
Saved 20210129102132614.jpg
http://image.ngchina.com.cn/2021/0128/20210128015857804.jpg
Saved 20210128015857804.jpg
http://image.ngchina.com.cn/2021/0125/20210125050736193.jpg
Saved 20210125050736193.jpg
http://image.ngchina.com.cn/2021/0125/20210125113017709.jpg
Saved 20210125113017709.jpg
https://www.zcool.com.cn/work/ZNDk0NTQxMTI=.html
爬取一系列的图如上
只需要换链接,和提取图片网址其他不变
from bs4 import BeautifulSoup
import requests
URL = "https://www.zcool.com.cn/work/ZNDk0NTQxMTI=.html"
html = requests.get(URL).text
#print(html)
soup = BeautifulSoup(html, 'lxml')
#img_ul = soup.find_all('div',{"class": "gallery-row"})
img_ul = soup.find_all(attrs={"class": "photo-information-content"})
print(img_ul)