爬虫入门实践之图片爬虫

        现在电商平台网站是大家访问最多的网站之一,比如看重一个商品,想到电商网站下载相应的大量图片,如果采用一张张下载则会耗费很多时间。这里可以通过爬虫程序对该商品的图片进行自动下载。本文以在京东上搜索面霜为例子进行讲解。

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.循环页面,调用爬取函数

运行代码之后:

如下图所示的是每一页对应的图片链接集合

下图所示的是保存的图片:

         因此,以上是爬取图片的一个实例,主要会读网页源码,还会制定筛选规则,熟悉正则表达式,这样才能比较好的编写爬虫程序。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值