的原因之一就是可以轻松爬取一个网站的数据。尤其是电商行业。组长:想出一个买卖游戏外设的交易app。我:好的,那我们卖什么?领导:朋友卖什么我们就卖什么。我:好的,让我们爬取一些数据。笑话就是笑话。虽然有夸张的成分,但也不无道理。作为入门,我们先来学习一下如何爬取网站图片。只需调用4个方法,即可轻松批量获取网站图片。为解决初学者学习难点,特设立Python学习按钮QUN:⑧⑤⑤-④零⑧-⑧⑧③从零基础到项目实战教程、开发工具和Python各领域电子书。与大家分享公司目前对python人才的需求和学好python的高效技能,持续更新最新教程!下面详细介绍每一步的调用方法(主要是拿别人代码后遇到的坑)第一步:获取网页源码urllib.request.urlopen().read()这个方法是为了获取request该URL返回的网页的源代码信息数据,当返回值为bytes类型时,必须转为utf-8才能在python程序中正常显示,所以必须调用decode()方法解码它。最终的结果就是我们平时编写或者查看的页面的源代码。这里可能出现的错误信息:1.Non-ASCIIcharacter'xe5'原因:这是一个编码问题。Python默认的编码文件使用的是ASCII码,而你的Python文件使用的是中文等非英文字符。解决方法:在第一行添加#--coding:UTF-8--2。如果爬取的网站是https协议,请求时需要验证一次SSL证书。解决方法:全局添加如下代码Step2:过滤掉图片URL这一步很关键,因为在一堆网页源代码中,需要有效找出目标对象(图片URL)的特征(结构特征)).如何找到它?1.理解图片URL的html表达学过html的同学都知道,图片的标签是,src属性定义了图片的来源路径。2.使用正则表达式进行匹配。正则表达式的各个符号的含义我还没有详细学习过,这里就不多说了。这里的正则表达式是指过滤掉所有标签为
,其src属性,属性值以http开头,以jpg结尾的源码。每个网站的规则不一样,代码不能直接套用。举个简单的例子,你要爬取的网站图片是png格式的,直接跑代码肯定抓不到东西。再比如,我在开头设置的规则中并没有加上http开头。结果抓到一些带有相对路径数据的图片url,导致后面无法访问该url,报错。3.将所有符合规则的代码存入列表。re.compile()根据包含正则表达式的字符串创建一个模式对象(直接使用即可)findall()返回所有匹配模式String的字符串,返回形式为数组。我们试试把imglist的结果打印出来,看看能不能把所有匹配规则的内容都找出来!第三步:定义图片保存路径。这一步看个人习惯。如果只有几张图片,则无需新建文件夹将图片一起保存整理。但是,如果你爬的是一个数量级比较大的网站或者网页,建议全部整理到一个文件夹中,方便管理。对于“创建新文件夹”的基本操作,只需调用os.makedirs()方法即可。但这里有3点需要注意:1、新建文件夹,是指定路径还是在当前路径下新建?指定路径:很简单,复制你要创建文件夹的路径,加上新文件夹的名称,直接作为参数写入方法即可。例如。(windows)当前路径:先获取当前目录,再拼接新文件夹的名称。获取当前目录的方式是:os.getcwd()eg.2、新建的文件夹是否已经存在?同一目录下不能有同名的文件/文件夹。直接创建会报错:文件已经存在,无法创建。3.需要考虑windows和macOS在路径表达上的差异吗?注意两个操作系统对路径的表述不同,特别是指定路径,必须输入正确的路径才能创建成功。第四步:将图片网址保存到文件夹现在,列表中已经保存了图片网址(见步骤二),保存图片的文件夹也有了,可以将虚拟图片网址转成真实的png或者.jpg文件。urllib.request.urlretrieve(url,filename)该方法是将远程数据下载到本地url:remoteorlocalurl,对应这里的图片url。filename:完整的保存位置,即“路径+文件名”。如果不指定此参数,urllib将生成一个临时文件来保存数据。这里需要注意三点:1、图片的文件名如何生成?推荐使用最简单的文件名生成方式:递增编号+图片后缀这里再次说明新建文件夹的重要性。新建文件夹后,这个目录就完全空白了,不管生成的文件名是否会和原来的文件名重复的问题。递增数字:例如,第一张图片称为“1.jpg”,第二张图片称为“2.jpg”,依此类推。2、一般从网站上爬取的图片有多张,如何批量处理?这也解释了为什么抓取的图片url要存放在列表中。给list一个循环,对每个url调用一次urllib.request.urlretrieve()方法,相当于把每个url保存为一张图片。3、错误:urllib2.HTTPError:HTTPError403:Forbidden原因:部分网站禁止爬虫处理。解决方法:可以在请求中加入header信息,伪装成浏览器访问User-Agent(具体信息可以通过Firefox的FireBug插件查询获取),然后请求。运行结果:一堆图片其他问题1.第三方库没有自动安装或导入,如urllib.request报错:ImportError:Nomodulenamedrequest解决方法:安装第三方库,安装python3后Mac上系统自动安装我们已经安装了pip3,所以每次只需要使用pip3安装即可(Windows请自行百度,注意区分Python2和Python3)输入安装命令:pip3安装请求2。一定要注意windows和mac系统的路径表达的区别一样是因为我在两个操作系统之间切换,所以很头疼,出现了这个问题。每次只要记得改就行了,没有什么技术难度。或者再增加一层系统判断兼容性。
