python爬取图片零基础
一、爬虫环境
1.python版本:python 3
2.anaconda
3.requests模块
4. PyCharm编辑器
二、安装环境
1.安装anaconda
在anaconda官网https://www.anaconda.com/进行下载(如果看不懂英文可以用谷歌浏览器或者QQ浏览器打开)
选择下载python3.6版本(根据自己电脑系统下载32位或64位)进行安装。
2.用anaconda安装requests模块
以管理员身份运行anaconda(我也不知道为什么要用管理员身份运行,好像是以为之前安装别的东西没用管理员运行总
是安装出错)
不管了,就用管理员安装。在anaconda中输入:conda install requests 进行安装
由于我安装过了就不安装了,输入:y 就会继续安装了。安装完成可以输入:conda list 查看
在其中就可以找到requests,requests安装完成。
3.安装PyCharm编辑器
在https://www.jetbrains.com/pycharm/中进行下载并安装。在安装完PyCharm后一定要记得配置,如果电脑中有多
个python版本一定要配置为你安装的anaconda路径中的python.exe,否则安装的requests模块会导入不了。
4.PyCharm的配置
打开PyCharm 点File -> settings
按截图点击进入
进入此页面后点击Proje:Python ->Project Interpreter在右边选择anaconda安装路径中的Python.exe,
再点击右下角OKPyCharm配置完成。
三、代码部分
1.requests模块的使用
用requests模块向网页发送get请求,在此之前先介绍一下今天要爬取的网站“http://unsplash.com
import requests #导入requests库
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'} #给请求指定一个请求头来模拟chrome浏览器
res = requests.get('https://unsplash.com') #像目标url地址发送get请求,返回一个response对象
print(res.text) #r.text是http response的网页HTML
这样就可以输出网页源代码,输出结果为
第一步完成,有没有一丝丝成就感?
2.分析网页源代码
在浏览器中打开http://unsplash.com网站按F12再点图中的选择元素(建议用谷歌浏览器,我发现IE浏览
器查找到的元素对应源码和PyCharm获取到的有一些差别)
再在网页中点击一张图片
点击后此元素的源码部分就找到了,这个图片的网络地址就是下图中蓝色的部分
你可以对比多个图片元素的网络地址,接下来考虑考虑怎么用python代码把这些网络地址一一摘出来。
3.用正则表达式摘出图片网络地址
写到此处我突然发现很难受,这个网页的源代码和我前几天写的时候有一点变动我之前写的正则表达式不
能用了,下来就说说正则表达式的用法吧,你在学习的时候再临时分析正好加深学习。
先找几个元素代码对比一下
<img itemprop="thumbnailUrl" data-test="standard-photo-grid-multi-col-img" sizes="(min-width: 1335px) 416px,(min-width: 992px) calc(calc(100vw - 72px) / 3), (min-width: 768px) calc(calc(100vw - 48px) / 2), 100vw" srcset="https://images.unsplash.com/photo-1521780372272-bb5e0f455dcf?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=ca8871f351fa47ea3f969912a157b235&auto=format&fit=crop&w=100&q=60 100w,
<img itemprop="thumbnailUrl" data-test="standard-photo-grid-multi-col-img" sizes="(min-width: 1335px) 416px, (min-width: 992px) calc(calc(100vw - 72px) / 3), (min-width: 768px) calc(calc(100vw - 48px) / 2), 100vw" srcset="https://images.unsplash.com/photo-1523768817242-39ab4249a6d5?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=14e85dfb408586029279636308bca290&auto=format&fit=crop&w=100&q=60 100w,
<img itemprop="thumbnailUrl" alt="Walt Disney Concert Hall at dusk" data-test="standard-photo-grid-multi-col-img" sizes="(min-width: 1335px) 416px, (min-width: 992px) calc(calc(100vw - 72px) / 3), (min-width: 768px) calc(calc(100vw - 48px) / 2), 100vw" srcset="https://images.unsplash.com/photo-1496277397776-ca8089ecc5b7?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=8788c40854a2dece7b70927c31806802&auto=format&fit=crop&w=100&q=60 100w,
这些就是我们需要的部分html代码,怎么用正则表达式从所有html源码中获取这些片段呢
chapter_photo_list=re.findall(r'<img itemprop="thumbnailUrl".*?100w,',html)
<img itemprop="thumbnailUrl".*?100w,',html)
从图中可以看出就这一句正则表达式就可以摘出这些片段下来解释解释正则表达式。
上面那句正则表达式中单引号里带下划线的就是我们要补充的,后面的html就对应的是上面的网页源代码。
这句中的 .*? 你可以理解为此处略去n个字,这句正则表达式的意思就是在html中匹配出所有以'<img itemprop=“thumbnilUrl”'开头以 '100w' 结尾的片段。
事实上现在获取到的片段有一部分是多余的,我们真正需要的只有 srcset="后面的Url 也就是上图中蓝色
的链接。
下来更改正则表达式
chapter_photo_list=re.findall(r'<img itemprop="thumbnailUrl".*?srcset="(.*?)100w,',html)
看看运行结果
成功了现在只剩下图片地址了。和之前的正则表达式比较比较有什么不同?
中间多了 srcset="(.*?) 大家需要了解的就是(.*?)它就代表获取 srcset=”与 100w之间的部分
有人会想为什么不直接写
chapter_photo_list=re.findall(r'srcset="(.*?)100w,',html)
而要写成那样?
因为这个网页源代码中不是只有图片Url的时候才有,如果你那样写会获取到好多没有的,所以前面那部
分必须有它起到了定位的作用。
在这里再展示一下以上代码
import requests #导入requests库
import re #写正则表达式要导入的
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'} #给请求指定一个请求头来模拟chrome浏览器
res = requests.get('https://unsplash.com') #像目标url地址发送get请求,返回一个response对象
print(res.text) #r.text是http response的网页HTML
res.encoding='utf-8' #把获取到的源代码格式改为utf-8,避免汉子乱码
html=res.textchapter_photo_list=re.findall(r'<img itemprop="thumbnailUrl".*?srcset="(.*?)100w,',html)
print(chapter_photo_list)
4.创建文件夹并切换路径
os.mkdir('D:\BeautifulPicture') #创建文件夹
os.chdir('D:\BeautifulPicture') #切换路径至上面创建的文件夹
在写这两句代码之前要先导入os,就是在开头写import os 你也可以在下面的代码中看到。
5.下载图片
for chapter_photo in chapter_photo_list: #从图片列表中循环取出每一个图片网络地址print(chapter_photo)url=chapter_photoname=re.findall(r'photo-(.*?)-',chapter_photo)[0] #用正则表达式在网络地址中匹配出一段作为jpg文件的命名print(name)img = requests.get(url)file_name = name + '.jpg' print('开始保存图片')f = open(file_name, 'ab')f.write(img.content)print(file_name, '图片保存成功!')f.close()
有没有发现这里的正则表达式又有不同?
这里的正则表达式后面多了一个 [0] ,这样就是为了避免它匹配符合条件的所有,[0]就是匹配到符合要求
的第一部分,[1]就是符合要求的第二部分,以此类推就像数组一样。
6.完整代码
import requests #导入requests库
import re #写正则表达式要导入的
import os
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'} #给请求指定一个请求头来模拟chrome浏览器
res = requests.get('https://unsplash.com') #像目标url地址发送get请求,返回一个response对象
print(res.text) #r.text是http response的网页HTML
res.encoding='utf-8' #把获取到的源代码格式改为utf-8,避免汉子乱码
html=res.textchapter_photo_list=re.findall(r'<img itemprop="thumbnailUrl".*?srcset="(.*?)100w,',html)
print(chapter_photo_list)#os.mkdir('D:\BeautifulPicture') #创建文件夹
os.chdir('D:\BeautifulPicture') #切换路径至上面创建的文件夹
for chapter_photo in chapter_photo_list:print(chapter_photo)url=chapter_photoname=re.findall(r'photo-(.*?)-',chapter_photo)[0]print(name)img = requests.get(url)file_name = name + '.jpg'print('开始保存图片')f = open(file_name, 'ab')f.write(img.content)print(file_name, '图片保存成功!')f.close()
应注意创建文件夹时应注意是否存在此文件夹,如果此文件夹存在应注释掉对应语句或删除文件夹或改创
建路径。
看看运行结果
运行完你会发现只有十张图片,这是因为这个网站是下拉式的它没有页数。如果感兴趣可以继续学习怎么
用代码实现下拉动作,或找有页数的图片网下载全网图片。谢谢观看!
python爬取图片零基础相关推荐
- python爬虫实践——零基础快速入门(四)爬取小猪租房信息
上篇文章我们讲到python爬虫实践--零基础快速入门(三)爬取豆瓣电影 接下来我们爬取小猪短租租房信息.进入主页后选择深圳地区的位置.地址如下: http://sz.xiaozhu.com/ 一,标 ...
- python快速编程入门课后程序题答案-Python编程从零基础到项目实战 完整PPT+习题答案...
Python编程从零基础到项目实战是一本介绍Python相关知识的Python基础教程,内容涉及算法.Python数据分析.图形处理.Web开发.科学计算.项目管理.人工智能.Python爬虫等.其中 ...
- 零基础学python需要多久-零基础学习Python开发需要多长时间?
原标题:零基础学习Python开发需要多长时间? Python开发技术目前可谓是互联网行业编程界的新宠,不少零基础想要进入IT行业的人员都纷纷加入学习Python开发.零基础学习Python开发技术需 ...
- python自学步骤-零基础学Python应该学习哪些入门知识及学习步骤安排
众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...
- [python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容
一.学习目标 了解图片内容定位方法matchTemplate使用 了解minMaxLoc方法使用 上一篇<[python opencv 计算机视觉零基础到实战] 十.图片效果毛玻璃> 如有 ...
- [python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃
一.学习目标 了解高斯模糊的使用方法 了解毛玻璃的图片效果添加 了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九.模糊 如有错误欢迎指出~ 二.了解模糊与 ...
- [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充
一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...
- [python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用
一.学习目标 了解opencv中图像的逻辑运算 了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...
- [python opencv 计算机视觉零基础到实战] 六、图像运算
一.学习目标 了解opencv中图像运算的方法 了解opencv中图像运算的运用 如有错误欢迎指出~ 二.了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] ...
最新文章
- linux下用gcc如何生成预处理、汇编等文件
- Android 中的 Service 全面总结(转)
- c语言中0到9的as编码c2,(全国计算机等级考试二级笔试样卷VsualBasc语言程序设计.doc...
- Apache(2)——进程与模块
- 用较早版本的APIs实现抽象类
- linux sar命令找不到,linux的sar命令未找到
- 请MVC5 WebApi2 支持OData协议查询
- linux ftp安装_Linux 文件共享方案
- 【转载】解决telnet无法连接 Connection refused
- oracle c# 插入中文乱码,C#写入Oracle 中文乱码问题
- 7万字总结Spring,这回能看懂Spring源码了!
- AVPlayer AVPlayerItem cannot service a seek request with a completion handler until its status is AV
- 将多张图片合并为一张图片
- 奥克兰大学计算机领域优势,奥克兰大学三大优势专业,知道这些你就不会选错专业了!...
- 奥特曼系列ol恶魔之花服务器,《奥特曼系列ol》依组麦鲁 培养攻略来袭
- 练习电脑键盘打字最好的网站
- 贪婪洞窟2 素材解密
- 排列组合相关公式讲解(Anm,Cnm等)
- MySQL的主键,索引设置和添加
- 操作系统进程完成时间,周转时间,带权周转时间, 平均周转时间, 带权平均周转时间计算
热门文章
- 道路运输车辆卫星定位系统企业监控平台标准符合性检测和道路运输车辆卫星定位系统企业视频监控平台检测攻略...
- Windows10 鼠标右键没有powershell
- 测试类/测试包/演示类/演示包的命名规范/命名规则
- React - 受控组件与非受控组件(实践妙用-模糊查询)
- python输出反三角形_Python实现输出“倒三角形”
- 曾国藩家书:做人须清廉谨慎勤劳
- 对于keep-alive的理解
- 从初稿到精品:论文校对软件的技术进步与应用
- java变量无修饰符默认类型,Java变量与修饰符
- 神经网络模型的过拟合和欠拟合问题