对于需要大量收集网络图片的人来说,使用爬虫技术手段能够高效快速的获取自己所需要的资料。我们都知道再打开图片或者网页时候都会有一个专属的url信息,通俗点就是网址。然后我们通过这个网址过去进行图片下载。下面我将通过代码示例看看如何通过爬虫来实现图片抓取。
import requests
# 准备url
url = 'https://img-blog.csdnimg.cn/2020051614361339.jpg'
# 发送get请求
response = requests.get(url)
# 以二进制写入的方式打开图片文件
f = open('test.jpg', 'wb')
# 将文件流写入图片
f.write(response.content)
# 关闭文件
f.close()
可以看到,代码和上面网页爬取是一样的,只是打开的文件后缀为jpg。实际上图片、视频、音频这种文件用二进制写入的方式比较恰当,而对应html代码这种文本信息,我们通常直接获取它的文本,获取方式为response.text,在我们获取文本后就可以匹配其中的图片url了。我们以下列http://topit.pro为例:
import re
import requests
# 要爬取的网站
url = 'http://topit.pro'
# 获取网页源码
response = requests.get(url)
# 匹配源码中的图片资源
results = re.findall("<img[\\s\\S]+?src=\"(.+?)\"", response.text)
# 用于命名的变量
name = 0
# 遍历结果
for result in results:
# 在源码中分析出图片资源写的是绝对路径,所以完整url是主站+绝对路径
img_url = url+result
# 下载图片
f = open(str(name) + '.jpg', 'wb')
f.write(requests.get(img_url).content)
f.close()
name += 1
上面我们就完成了一个网站的爬取。在匹配时我们用到了正则表达式,因为正则的内容比较多,在这里就不展开了,有兴趣的读者可以自己去了解一下,这里只说一个简单的。Python使用正则是通过re模块实现的,可以调用findall匹配文本中所有符合要求的字符串。该函数传入两个参数,第一个为正则表达式,第二个为要匹配的字符串,对正则不了解的话只需要知道我们使用该正则可以将图片中的src内容拿出来。