现在电商平台网站是大家访问最多的网站之一,比如看重一个商品,想到电商网站下载相应的大量图片,如果采用一张张下载则会耗费很多时间。这里可以通过爬虫程序对该商品的图片进行自动下载。本文以在京东上搜索面霜为例子进行讲解。
1.了解待爬虫网页
https://list.jd.com/list.html?cat=1316,1381,1391点开该网址,即可进入面霜页面,里面有形形色色、不同品牌的面霜,然后拖到底部,发现有许多页,因此手工下载费时费力。
点击其中一页,发现URL如下所示:
核心部分为:https://list.jd.com/list.html?cat=1316,1381,1391&page=1,由此看出,page关键字段表示页面,可以在程序中通过遍历页面的形式爬取每一页的图片。
因为需要对一页所有商品的图片进行下载,把不需要的过滤,因此需要涉及页面源代码的过滤,并且根据符合要求的代码中关于页面组件里的src属性的url进行保存图片到既定位置。所以,这里首先了解一下我们需要筛选的代码,点击F12,进入源码页面,如下图所示:
然后点击左上角的箭头,发现箭头高亮状态。这说明当前情况下可以定位页面具体位置。
选择第一页第一个商品,这说明从这里开始过滤,需要挑选一个具有唯一性的标识,才能较好的过滤掉不需要的信息,这里具有唯一性的组件是<div id=”plist”> ,商品的最后且具有唯一性的标识是<div class=”page clearfix”>。因此,过滤除商品外其它信息的规则pattern1=”<div id=”plist”.+? <div class=”page clearfix””,通过该过滤规则过滤之后的源码是需要的商品的信息。但是我们的目的是为了下载图片,因此,只需要筛选相应的图片信息即可。
选择两个商品的图片截图源码可以看出,<img data-img=”1″ width=”220″ height=”220″>是公共部分,需要用正则表达式的是data-lazy-img=”//.+?\.jpg”,这是对图片链接的提取,这里用了?是懒惰模式,只会提取需要的链接部分。
2.爬取图片
根据以上分析,定义了两个筛选规则:pattern1= “<div id=”plist”.+? <div class=”page clearfix””,pattern2=<img data-img=”1″ width=”220″ height=”220″ data-lazy-img=”//.+?\.jpg”>。待爬取的网页有好多页,每一页的规则一致,因此写一个针对一页的爬取函数,然后通过循环调用这个函数即可实现全部的图片下载。具体爬取代码如下:
import re
import urllib.request
def picture_craw(url,page):
html = urllib.request.urlopen(url).read()
html = str(html)
#print(html)
pat1='<div id="plist".+? <div class="page clearfix">'
result = re.compile(pat1).findall(html)
result=result[0]#将字符串从集合中取出
#print(result)
pat2 = '<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)">'
imagelist = re.compile(pat2).findall(result)
print(imagelist)
x=1
for imageurl in imagelist:
imagename="C:/Users/carson0408/Desktop/webcrawler/picture/"+str(page)+"-"+str(x)+".jpg"
imageurl="http://"+imageurl
try:
urllib.request.urlretrieve(imageurl,filename=imagename)
except urllib.error.URLError as e:
x+=1
x+=1
for i in range(1,13):
url="https://list.jd.com/list.html?cat=1316,1381,1391&page="+str(i)
picture_craw(url,i)
由于页面特别多,只选择其中一部分页面进行下载。其具体步骤如下:
1.首先打开给定的url并读取源代码。
2.根据既定规则对源代码进行两次筛选,筛选后的就是每页的图片链接
3.遍历图片链接集合,对每一个链接对应的图片都保存到既定的位置。这里使用urllib.request.urlretrieve(imageurl,filename=imagename)
4.循环页面,调用爬取函数
运行代码之后:
如下图所示的是每一页对应的图片链接集合
下图所示的是保存的图片:
因此,以上是爬取图片的一个实例,主要会读网页源码,还会制定筛选规则,熟悉正则表达式,这样才能比较好的编写爬虫程序。
今天的文章爬虫图片app_python爬虫入门最好书籍分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/76254.html