一、原理小结

最近在学习用python的爬虫爬取网络上的图片,制作数据集并用于后续的一些实验。看了很多关于python爬取图片的介绍,并验证了相关代码,先推荐几个介绍比较好的爬虫过程:

[1]小白爬虫第一弹之抓取妹子图(这篇博客的过程讲解的非常详细)

[2]Python爬虫之——爬取妹子图片(静态图片爬取)

[3]利用python爬取网页图片(动态加载图片的爬取)

总体上来说,爬虫的主要思路大致可以描述为:

1. 判断待爬取网页中的图片是静态还是动态,并利用开发者选项F12查找图片的源

2. python中导入相关模块,读取解析页面文件

3. 分析所有图片的位置特点,并用python进行查找

4. 设置下载路径,对找到的图像进行批量下载

其中最为关键的还是第1步,即对页面的分析,找到相关的图像位置。

二、动态图片的爬取

动态图片是指像百度图片搜索,搜狗搜图等搜索引擎的搜索结果,这类图片的最大特点是,每次只加载一批图片,每向下拉都会继续加载新的图像,关于这类图片的爬取可以参考[3]。这里[3]给出一个可以直接运行的代码:

# 导入相关的库
import requests
import json
import urllib
import os# 爬取图片的保存路径
output_dir = "./images/"# 爬取搜狗搜图的函数
def getSogouImag(category, length, path):'''参数category:指要爬取图片的类型,字符串格式,如:'壁纸'参数length:指要爬取多少张,整型参数path:存储路径'''n = lengthcate = category#http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E7%BE%8E%E5%A5%B3&tag=%E5%85%A8%E9%83%A8&start=0&len=15imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n)+'&width=1536&height=864')jd = json.loads(imgs.text)jd = jd['all_items']imgs_url = []for j in jd:imgs_url.append(j['pic_url'])m = 0for img_url in imgs_url:print('***** '+str(m)+'.jpg *****'+'   Downloading...')urllib.request.urlretrieve(img_url, path+str(m)+'.jpg')m = m + 1print('Download complete!')# 检查是否存在路径,若不存在,则创建
if not os.path.exists(output_dir):os.makedirs(output_dir)# 爬取图片
getSogouImag('壁纸', 1000, output_dir)

修改的话可以修改getSogouImag中的'壁纸',将其改为其他类型即可爬取相应的图片。

爬取的效果图为:

三、静态图片的爬取

静态图片是指类似网页浏览图片那样,每个页面仅有一张或者几张图片,然后通过点击下一页来获取下一个页面中的图片。这类图片的爬取可以参考[2]。这里[2]给出一个可以直接运行的代码:

# 导入相关的库
import requests
from bs4 import BeautifulSoup
import os# 待爬取的网址
all_url = 'http://www.mzitu.com'# http请求头,防止反爬虫
Hostreferer = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)','Referer':'http://www.mzitu.com'}
# 此请求头破解盗链
Picreferer = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)','Referer':'http://i.meizitu.net'
}# 解析页面
start_html = requests.get(all_url,headers = Hostreferer)# 爬取图片的保存地址
path = 'D:/mzitu/'#找寻最大页数
soup = BeautifulSoup(start_html.text,"html.parser")
page = soup.find_all('a',class_='page-numbers')
max_page = page[-2].textsame_url = 'http://www.mzitu.com/page/'
# 逐个爬取套图
for n in range(1,int(max_page)+1):ul = same_url+str(n)# 解析页面start_html = requests.get(ul, headers = Hostreferer)soup = BeautifulSoup(start_html.text,"html.parser")# 找到图片所在的位置all_a = soup.find('div',class_='postlist').find_all('a',target='_blank')for a in all_a:title = a.get_text()    #提取文本if(title != ''):print("准备扒取:"+title)# win不能创建带?的目录if(os.path.exists(path+title.strip().replace('?',''))):#print('目录已存在')flag=1else:os.makedirs(path+title.strip().replace('?',''))flag=0os.chdir(path + title.strip().replace('?',''))# 找到href属性信息href = a['href']html = requests.get(href,headers = Hostreferer)mess = BeautifulSoup(html.text,"html.parser")pic_max = mess.find_all('span')pic_max = pic_max[9].text          #最大页数if(flag == 1 and len(os.listdir(path+title.strip().replace('?',''))) >= int(pic_max)):print('已经保存完毕,跳过')continue# 爬取套图中每一页的图片for num in range(1,int(pic_max)+1):pic = href+'/'+str(num)html = requests.get(pic,headers = Hostreferer)mess = BeautifulSoup(html.text,"html.parser")pic_url = mess.find('img',alt = title)print(pic_url['src'])#exit(0)html = requests.get(pic_url['src'],headers = Picreferer)file_name = pic_url['src'].split(r'/')[-1]# 保存结果f = open(file_name,'wb')f.write(html.content)f.close()print('完成')print('第',n,'页完成')

该代码可直接运行,爬取的最终结果就不再展示。

用python爬取图片的一点小结相关推荐

  1. python爬取图片然后保存在文件夹中

    python爬取图片然后保存在文件夹中 直接上代码: import os import requests import redef getimg(soup,i):print('http:'+ soup ...

  2. python爬取图片并保存到本地

    Python爬取图片(你懂得) requests与Bs4 这两个模块是本文使用的主要模块,requests可以获取连接,bs4全名BeautifulSoup,是编写python爬虫常用库之一,主要用来 ...

  3. Python爬取图片、视频以及将数据写入excel的方法小摘要

    Python爬取图片.视频以及将数据写入excel的方法小摘要 1.爬取图片 2.爬取视频 3.将获取的数据存入excel 4.备注 1.爬取图片 import requests #导入request ...

  4. Python——爬取图片

    大家好,我是@xiaomeng 小孟 您好 欢迎大家阅读今天的文章----Python爬取图片(爬虫) 最近爬虫挺火的,所以我今天也来一个爬虫! 正文: 首先,我们先下载模块,pip install ...

  5. python爬取图片链接标签的src属性值_python爬取图片遇见src乱码: data:image/png;base64...

    python爬取图片遇见src乱码: data:image/png;base64 向爬取自己喜欢的图片,但是在爬取下来的代码当中图片的src会出现乱码的情况:data:image/png;base64 ...

  6. Python爬取图片实例

    网络爬虫又叫网络蜘蛛.网络机器人等名词.网络爬虫就是自动化的去抓取网络数据,可以在网络中获取满足自己需求的相关信息和资料.通过网络爬虫可以获取大量的数据并且集中在一起,然后就可以进行数据的批量分析和处 ...

  7. python爬取图片并写入excel

    目标: 1)python爬取图片并下载到本地文件夹 2)python爬取图片并写入到excel文件 Ⅰ.python程序 # 导入库 import requests import parsel imp ...

  8. php直播源码,python爬取图片

    php直播源码,python爬取图片的相关代码 import requests import osfrom bs4 import BeautifulSoupheaders = {'user-agent ...

  9. python爬取图片并以二进制方式保存到本地

    本篇主要介绍python 爬取图片并以二进制形式保存到本地 这回爬取的是一个写真图片网站,上面有一个365日365枚照片写真 写真图片网站链接 明确目标,爬取每一页的20张图片,循环生成没一页的url ...

最新文章

  1. LocalStorage、SessionStorage
  2. python matplotlib 显示opencv的图像
  3. Linux的shell脚本实战之检查主机IP是否存在
  4. 你还在使用 try-catch-finally 关闭资源?不太优雅~
  5. MAC apache配置
  6. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能...
  7. ArcGIS 9.2 Server Pack 5 蓄势待发
  8. python调用hownet API计算两个词的相似度
  9. 突破拐点:企业成长的S曲线
  10. 数据库三大范式、BCNF范式、反范式
  11. 中科院计算所沈华伟:图神经网络表达能力的回顾和前沿
  12. 应力应变基础理论分析
  13. Keycloak Gatekeeper:Keycloak通用代理
  14. 计算机开机显示屏节能,电脑显示屏显示节能模式怎么处理
  15. C++技术的主要应用领域
  16. vue 首屏优化加载(三)(CND引用)
  17. vue使用sort实现json数据中字母排序
  18. 环境污染、空气质量数据集:省/市/县PM2.5浓度、空气流通系数、逆温数据
  19. 【超图+CESIUM】【基础API使用示例】42、超图|CESIUM - 绘制编辑线段|读取kml文件绘制编辑|导出kml线段数据
  20. idea 输出结果如何调整成横排

热门文章

  1. 开发一个自动点击工具
  2. 《听说你还相信爱情》
  3. 郭德纲的279个经典包袱
  4. 继承LinkedHashMap实现自定义HashMap设定条件触发删除eldest元素
  5. Linux(N1小钢炮,树莓派,openwrt等)获取ipv6公网地址发送给自己微信
  6. Android将screenOrientation设置为portrait不起作用
  7. Macbook/iMac电脑该怎么清理灰尘
  8. oracle模式和表,Oracle 的锁表机制--EXCLUSIVESHAVE(共享和独占模式)
  9. Virtual Box的Alpine系统挂载ISO光盘文件和共享目录
  10. 用idea搭建一个Spring Cloud项目(含代码)