新西兰服务器

如何使用Python自动爬取图片并保存


如何使用Python自动爬取图片并保存

发布时间:2022-01-03 15:01:07 来源:高防服务器网 阅读:75 作者:小新 栏目:开发技术

小编给大家分享一下如何使用Python自动爬取图片并保存,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、准备工作

用python来实现对百度图片的爬取并保存,以情绪图片为例,百度搜索可得到下图所示

f12打开源码

在此处可以看到这次我们要爬取的图片的基本信息是在img – scr中

二、代码实现

这次的爬取主要用了如下的第三方库

import re  import time  import requests  from bs4 import BeautifulSoup  import os

简单构思可以分为三个小部分

1.获取网页内容

2.解析网页

3.保存图片至相应位置

下面来看第一部分:获取网页内容

baseurl = 'https://cn.bing.com/images/search?q=%E6%83%85%E7%BB%AA%E5%9B%BE%E7%89%87&qpvt=%e6%83%85%e7%bb%aa%e5%9b%be%e7%89%87&form=IGRE&first=1&cw=418&ch=652&tsc=ImageBasicHover'  head = {          "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67"}      response = requests.get(baseurl, headers=head)  # 获取网页信息      html = response.text  # 将网页信息转化为text形式

是不是so easy

第二部分解析网页才是大头

来看代码

Img = re.compile(r'img.*src="(.*?)"')  # 正则表达式匹配图片  soup = BeautifulSoup(html, "html.parser")  # BeautifulSoup解析html      #i = 0  # 计数器初始值      data = []  # 存储图片超链接的列表      for item in soup.find_all('img', src=""):  # soup.find_all对网页中的img—src进行迭代          item = str(item)  # 转换为str类型          Picture = re.findall(Img, item)  # 结合re正则表达式和BeautifulSoup, 仅返回超链接          for b in Picture:              data.append(b)              #i = i + 1              return data[-1]         # print(i)

这里就运用到了BeautifulSoup以及re正则表达式的相关知识,需要有一定的基础哦

下面就是第三部分:保存图片

    for m in getdata(              baseurl='https://cn.bing.com/images/search?q=%E6%83%85%E7%BB%AA%E5%9B%BE%E7%89%87&qpvt=%e6%83%85%e7%bb%aa%e5%9b%be%e7%89%87&form=IGRE&first=1&cw=418&ch=652&tsc=ImageBasicHover'):          resp = requests.get(m)  #获取网页信息          byte = resp.content  # 转化为content二进制          print(os.getcwd()) # os库中输出当前的路径          i = i + 1 # 递增          # img_path = os.path.join(m)          with open("path{}.jpg".format(i), "wb") as f: # 文件写入              f.write(byte)              time.sleep(0.5) # 每隔0.5秒下载一张图片放入D://情绪图片测试          print("第{}张图片爬取成功!".format(i))

各行代码的解释已经给大家写在注释中啦,不明白的地方可以直接私信或评论哦~

下面是完整的代码

import re  import time  import requests  from bs4 import BeautifulSoup  import os           # m = 'https://tse2-mm.cn.bing.net/th/id/OIP-C.uihwmxDdgfK4FlCIXx-3jgHaPc?w=115&h=183&c=7&r=0&o=5&pid=1.7'  '''  resp = requests.get(m)  byte = resp.content  print(os.getcwd())  img_path = os.path.join(m)  '''  def main():      baseurl = 'https://cn.bing.com/images/search?q=%E6%83%85%E7%BB%AA%E5%9B%BE%E7%89%87&qpvt=%e6%83%85%e7%bb%aa%e5%9b%be%e7%89%87&form=IGRE&first=1&cw=418&ch=652&tsc=ImageBasicHover'      datalist = getdata(baseurl)        def getdata(baseurl):      Img = re.compile(r'img.*src="(.*?)"')  # 正则表达式匹配图片      datalist = []      head = {          "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67"}      response = requests.get(baseurl, headers=head)  # 获取网页信息      html = response.text  # 将网页信息转化为text形式      soup = BeautifulSoup(html, "html.parser")  # BeautifulSoup解析html      # i = 0  # 计数器初始值      data = []  # 存储图片超链接的列表      for item in soup.find_all('img', src=""):  # soup.find_all对网页中的img—src进行迭代          item = str(item)  # 转换为str类型          Picture = re.findall(Img, item)  # 结合re正则表达式和BeautifulSoup, 仅返回超链接          for b in Picture:  # 遍历列表,取最后一次结果              data.append(b)              # i = i + 1              datalist.append(data[-1])      return datalist  # 返回一个包含超链接的新列表      # print(i)     '''  with open("img_path.jpg","wb") as f:      f.write(byte)  '''     if __name__ == '__main__':      os.chdir("D://情绪图片测试")         main()      i = 0  # 图片名递增      for m in getdata(              baseurl='https://cn.bing.com/images/search?q=%E6%83%85%E7%BB%AA%E5%9B%BE%E7%89%87&qpvt=%e6%83%85%e7%bb%aa%e5%9b%be%e7%89%87&form=IGRE&first=1&cw=418&ch=652&tsc=ImageBasicHover'):          resp = requests.get(m)  #获取网页信息          byte = resp.content  # 转化为content二进制          print(os.getcwd()) # os库中输出当前的路径          i = i + 1 # 递增          # img_path = os.path.join(m)          with open("path{}.jpg".format(i), "wb") as f: # 文件写入              f.write(byte)              time.sleep(0.5) # 每隔0.5秒下载一张图片放入D://情绪图片测试          print("第{}张图片爬取成功!".format(i))

最后的运行截图

以上是“如何使用Python自动爬取图片并保存”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注高防服务器网行业资讯频道!

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[