四个步骤教你爬取⽹站图⽚,新⼿必学
很多⼈学习Python很重要的⼀个原因是,可以很简单的把⼀个⽹站的数据爬下来。
尤其是做我们这⼀⾏,产品经理,电商⾏业。
领导:弄⼀个买卖游戏周边商品的交易APP出来。
我:⾏,那我们卖什么呀?
领导:看下友商卖什么我们就卖什么。
我:好吧,那就爬点数据下来吧。
玩笑归玩笑,虽有夸张成分,但也不⽆道理。注意:很多⼈学Python过程中会遇到各种烦恼问题,没有⼈帮答疑容易放弃。为此⼩编建了个Python全栈免费答疑.裙 :七⾐⾐九起起巴⽽五(数字的谐⾳)转换下可以到了,不懂的问题有⽼司机解决⾥⾯还有最新Python教程项⽬可拿,,⼀起相互监督共同进步!
python新手代码例子作为⼊门级别,⾸先就来学习下怎么爬取⽹站图⽚。只需要调⽤4个⽅法,即可轻松批量拿到⽹站图⽚。
下⾯对于每⼀步调⽤的⽅法进⾏详细说明(主要还是⾃⼰拿了别⼈代码之后遇到的坑)
第⼀步:获取⽹页的源代码
这个⽅法是获取到请求的这个URL所返回的⽹页源代码信息数据,返回值是bytes类型时,要将其转换成utf-8才能正常显⽰在python程序中,所以还要调⽤decode()⽅法进⾏解码。
最终得到的就是平时我们编写或者查看的页⾯源代码了。
这⾥可能会出现的报错信息:
1.Non-ASCII character '\xe5'
原因:这是编码的问题,Python的默认编码⽂件是⽤的ASCII码,⽽你的Python⽂件中使⽤了中⽂等⾮英语字符。
解决⽅法:在第⼀⾏添加 # -- coding: UTF-8 --
2.如果爬取的⽹站是https协议的,需要在请求时会验证⼀次SSL证书
解决⽅法:全局加上以下代码
第⼆步:过滤出图⽚URL
这⼀步⾄为关键,因为在⼀堆⽹页源代码中,要有效出⽬标对象(图⽚URL)的特点(结构特征)才⾏。怎么?
1.了解图⽚URL的html表达⽅式
学过html的同学都知道,图⽚的标签是<img>,src属性定义其图⽚源路径。
2.使⽤正则表达式进⾏匹配
我也没有详细了解过正则表达式各个符号的含义,这⾥不展开讲。
这⾥的正则表达式的意思是,过滤出所有标签是<img>,旗下的src属性,且属性值是以http开头jpg结尾的源代码。
每个⽹站的规则都不⼀样,不能直接套⽤代码。
简单例⼦,你要爬取的⽹站图⽚是png格式,直接拿代码去运⾏肯定是什么都抓不到的。
再例如,我在⼀开始设定的规则中是没有加上http开头的,结果抓到⼀些图⽚URL是相对路径的数据,导致后⾯是⽆法访问URL报错的。
3.将所有匹配规则的代码存⼊list⾥
repile() 根据包含的正则表达式的字符串创建模式对象(直接拿来⽤就好)
findall() 返回string中所有与pattern相匹配的全部字串,返回形式为数组
我们试⼀下打印出来imglist是什么结果,看是不是就把所有匹配规则的内容全部出来呢!
第三步:定义图⽚保存路径
这⼀步看个⼈习惯,如果只是少数⼏张图⽚,就没有必要新建⼀个⽂件夹给图⽚都保存整理到⼀起。
不过如果是爬⼀个⽹站或⼀个⽹页相对数量级⽐较⼤的时候,建议还是全部整理到⼀个⽂件夹⾥⾯,好管理嘛。
“新建⽂件夹”这个基础的操作,就调⽤os.makedirs()⽅法即可。
但是这⾥有3个注意的点:
1.新建⽂件夹,你是希望指定路径还是在当前路径下创建?
指定路径:很简单,直接把你想要创建⽂件夹的路径复制出来,加上新建⽂件夹的名称,作为参数直接写到⽅法⾥即可。
eg.(windows)
当前路径:先获取当前的⽬录,再拼接上新建⽂件夹的名称。
获取当前⽬录的⽅式是:os.getcwd()
eg.
2.新建的⽂件夹是否已存在?
相同⽬录下不能有重名的⽂件/⽂件夹,如果直接创建的话,就会报错:⽂件已存在,⽆法创建。
3.是否需要考虑windows和macOS的路径表述⽅式不⼀样?
注意⼀下,两个操作系统对于路径的表述⽅式是不⼀样的,尤其是指定路径,要输⼊正确的路径才能创建成功。
第四步:将图⽚URL保存到⽂件夹下
现在,图⽚URL已经存⼊到list⾥(见第2步)、保存图⽚的⽂件夹也有了,就可以将虚拟的图⽚url转换成真实的png或jpg⽂件。quest.urlretrieve(url, filename) 这个⽅法就是将远程数据下载到本地
url:远程或本地的url,对应这⾥就是要放图⽚URL了。
filename:保存的完整地⽅,即“路径+⽂件名”。如果未指定该参数,urllib会⽣成⼀个临时⽂件来保存数据。
这⾥要注意3个地⽅:
1.图⽚的⽂件名怎么⽣成?
建议使⽤最简单的⽅式来⽣成⽂件名:递增数字+图⽚后缀
这⾥就再次说明要新建⽂件夹的重要性,新建⽂件夹后,这个⽬录下是全新空⽩的,不⽤考虑⽣成的⽂件名会不会和原有⽂件名重复的问题。
这⾥也说明了,为什么要将抓取到的图⽚url存到list⾥⾯了。给list⼀个循环,每个url调⽤⼀次quest.urlretrieve()⽅法,那就相当于每个url都保存为1个图⽚。
3.报错:urllib2.HTTPError: HTTP Error 403: Forbidden
原因:⼀些⽹站是禁⽌爬⾍做的处理
解决⽅法:可以在请求加上头信息,伪装成浏览器访问User-Agent(具体的信息可以通过⽕狐的FireBug插件查询),再去请求。
运⾏结果:⼀堆图⽚
其他问题
1.没有⾃动安装或导⼊第三⽅库,如quest
报错:ImportError: No module named request
解决⽅法:安装第三⽅库,Mac机上在安装python3之后,系统是⾃动安装了pip3,所以我们只需要每次使⽤pip3即可安装(Windows请⾃⾏百度,注意区分Python2和Python3)
敲⼊安装命令:pip3 install requests
2.千万千万要注意windows和mac系统的路径表达⽅式不⼀样
因为我是两个操作系统切换着⽤,所以很头痛有这个问题,每次要记得改就是了,没技术难度。或者
再加⼀层系统判断进⾏兼容就好了。
最后注意:很多⼈学Python过程中会遇到各种烦恼问题,没有⼈帮答疑容易放弃。为此⼩编建了个Python全栈免费答疑.裙 :七⾐⾐九起起巴⽽五(数字的谐⾳)转换下可以到了,不懂的问题有⽼司机解决⾥⾯还有最新Python教程项⽬可拿,,⼀起相互监督共同进步!
本⽂的⽂字及图⽚来源于⽹络加上⾃⼰的想法,仅供学习、交流使⽤,不具有任何商业⽤途,版权归原作者所有,如有问题请及时
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论