09Python爬虫---爬虫实战之京东图片

目的:获取京东手机页面的图片
1、打开京东首页(www.jd.com),选择对应的”手机/运营商/数码”分类,并进入“手机”子分类
1

2
链接地址:https://list.jd.com/list.html?cat=9987,653,655&page=1
分析网页源码:找到对应的图片代码段:
这里写图片描述

思路:

1、爬取网页
2、然后根据正则爬取出 关键内容
3、根据关键内容 再用正则匹配出 图片地址
4、存到服务器将图片

源代码:

import urllib.request
import re
import urllib.error
def craw(url, page):
    html1 = urllib.request.urlopen(url).read()
    html1 = str(html1)  # 如果不转为str 则会报TypeError: cannot use a string pattern on a bytes-like object
    # 先把所有图片部分的数据全部取出
    pat1 = '<div id="plist".+?<div class="clr"'  # 注意单双引号  
    result1 = re.compile(pat1).findall(html1)
    if result1:
        result1 = result1[0]
        # 京东图片加载时首先加载8张,然后的图片为懒加载所以要获取两次图片
        # 根据源码写出对应图片链接地址的正则表达式
        pat2 = '<img width="220" height="220" data-img="1" src="//(.+?\.jpg)"' 
        pat3 = '<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)"'  # 懒加载图片正则
        imagelist = re.compile(pat2).findall(result1) # 常加载的图片
        imagelist1 = re.compile(pat3).findall(result1)  # 懒加载的图片
        imagelist = imagelist + imagelist1  # 数组合并 将所有图片合并
        x = 1
        for imageurl in imagelist:
            # 对所存的图片进行命名
            imagename = "/home/zyb/crawler/myweb/part6/img1/"+str(page)+str(x)+".jpg" 
            # 图片地址
            imageurl = "http://"+imageurl
            try:
                # 获取图片并保存
                urllib.request.urlretrieve(imageurl, filename=imagename)
            except urllib.error.URLError as e:
                if hasattr(e, "code"):  # 使用hasattr函数判断是否有这些属性
                    x += 1
                if hasattr(e, "reason"):
                    x += 1
            x += 1
        print("爬取成功")
    else:
        print("爬取失败,未获取内容")
for i in range(1, 2):
    url = "https://list.jd.com/list.html?cat=9987,653,655&page="+str(i)
    craw(url, i)

最终结果:
这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章