首先打开京东商城-手机专栏https://list.jd.com/list.html?cat=9987,653,655&page=1&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main

然后打开下一页https://list.jd.com/list.html?cat=9987,653,655&page=2&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main

然后再打开第三页https://list.jd.com/list.html?cat=9987,653,655&page=3&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main

对比三个网址发现 手机专栏下的网址是通过page值的变更而变化 可以确定用于爬取的网址为https://list.jd.com/list.html?cat=9987,653,655&page=

打开页面后来分析要提取的图片地址,提取地址后再用urllib.request.urlretrieve()来保存图片到本地

右键---查看页面源代码--

ctrl +f  输入 第一个图片的名称--Apple iPhone 7 (A1660) 128G 黑色 移动联通电信4G手机

定位到第一个图位置 并找到一个具有唯一性特征的标识信息,用于信息提取   <div id="plist"

然后找到最后一个图片的位置 并找下面具有唯一标识的信息   <div class="page clearfix">

所以第一个pat='<div id="plist".+? <div class="page clearfix">'

然后是最关键的图片源代码分析

<img width="220" height="220" data-img="1" data-lazy-img="//img13.360buyimg.com/n7/jfs/t3961/190/2233466155/341332/2e3803d1/58a55d2aN18488958.jpg">
<img width="220" height="220" data-img="1" data-lazy-img="//img10.360buyimg.com/n7/jfs/t19855/305/881807243/378198/d7130fdd/5b0d0fd8N88e7901d.jpg">
<img width="220" height="220" data-img="1" src="//img12.360buyimg.com/n7/jfs/t2611/360/858752078/90212/68466704/5728910cNd55ac232.jpg">
<img width="220" height="220" data-img="1" src="//img10.360buyimg.com/n7/jfs/t18406/198/1607027948/289456/3e86953e/5acdb065N8f39d863.jpg">

根据上面的对比分析得出下面pat

pat2='<img width="220" height="220" data-img="1" src="//(.+?\.jpg)">'

pat3='<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)">'

根据上面的分析下面编写完整代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import os
import sys
import urllib.requestdef craw(url,page):req=urllib.request.Request(url)req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0")html1=urllib.request.urlopen(req).read()html1 = str(html1)##匹配元素1---父节点
#    pat1 = '<div id="plist".+? <div class="page clearfix">';
#    result1 = re.compile(pat1).findall(html1);
#    result1 = result1[0];##匹配元素2--子节点pat2='<img width="220" height="220" data-img="1" src="//(.+?\.jpg)">'pat3='<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)">'  ##提取连接地址list--并合并listimagelist=re.compile(pat2).findall(html1)imagelist1=re.compile(pat3).findall(html1)imagelist2=imagelist+imagelist1x=1for imgurl in imagelist2:#设置地址跟爬取图片的地址名称imagename="/home/urllib/test/image/"+str(page)+str(x)+".jpg"imgurl= "http://" +imgurlprint(imgurl)try:#保存图片urllib.request.urlretrieve(imgurl,filename=imagename)except urllib.error.URLError as e:if hasattr(e, "code"):x+=1if hasattr(e, "reason"):x+=1x+=1for i in range(1,3):url = 'https://list.jd.com/list.html?cat=9987,653,655&page='+str(i)craw(url,i)

执行python  test.py 结果

在对应的路径下爬取保存了相应图片,爬取成功

另一种网址的爬取方法代码类似

#!/usr/bin/env python
# -*- coding: utf-8 -*-import re
import urllib.requestdef craw(url,page):req=urllib.request.Request(url)req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36")html1=urllib.request.urlopen(req).read()html1=str(html1)#pat1 = '<div id="plist".+? <div class="page clearfix">';#result1 = re.compile(pat1).findall(html1);#result1 = result1[0];# pat1='<img width="220" height="220" data-img="1" src="//(.+?\.jpg)">'
#   pat2='<img width="220" height="220" data-img="1" data-lazy-img="//(.+?\.jpg)">'
#   imagelist=re.compile(pat).findall(html1)pat1='<img width="220" height="220" class="err-product" data-img="1" source-data-lazy-img="//(.+?\.jpg)" />'
#   pat2='<img width="220" height="220" class="" data-img="1" source-data-lazy-img="" data-lazy-img="done" src="//(.+?\.jpg)">'imagelist=re.compile(pat1).findall(html1)
#   imagelist2=re.compile(pat2).findall(html1)
#   imagelist=imagelist1+imagelist2x=1for imageurl in imagelist:imagename="/home/urllib/test/image/"+str(page)+str(x)+".jpg"imageurl="http://"+imageurlprint(imageurl)try:urllib.request.urlretrieve(imageurl,filename=imagename)except urllib.error.URLError as e:if hasattr(e,"code"):x+=1if hasattr(e,"reason"):x+=1x+=1#for i in range(1,3):
#   url="https://list.jd.com/list.html?cat=670,671,672&page="+str(i)+"&sort=sort_totalsales15_desc&trans=1&JL=6_0_0#J_main"
#   craw(url,i)for i in range(1,4):if (i%2) != 0:url="https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&page="+str(i)            #搜索界面的网址,page是奇数craw(url,i)

转载于:https://blog.51cto.com/superleedo/2123315

python 使用爬虫下载京东图片相关推荐

  1. python保存爬虫下载的图片和视频

    本次是在django中完成 静态文件目录 拼接路径 图片路径 image=os.path.join(STATICFILES_DIRS[0],"audio") # os.path.j ...

  2. python实现爬虫下载美女图片

    本文转自http://blog.csdn.net/hello_katty/article/details/46887937,所有权力归原作者所有. 本次爬取的贴吧是百度的美女吧,给广大男同胞们一些激励 ...

  3. python网络爬虫_爬图片

    python网络爬虫_爬图片 1.安装 Beautifulsoup4 #解析返回的html与json数据pip install Beautifulsoup4 使用 :           运行后输入要 ...

  4. Python3.x爬虫下载网页图片

    Python3.x爬虫下载网页图片 一.选取网址进行爬虫 本次我们选取pixabay图片网站 url=https://pixabay.com/ 二.选择图片右键选择查看元素来寻找图片链接的规则 通过查 ...

  5. Python 简单爬虫下载小说txt

    Python 简单爬虫下载小说txt #第一次写爬虫代码 欢迎交流指正 我们范例爬取的对象是笔趣阁的<圣墟> (最近非常火的连载小说) ##为什么选择笔趣阁# 主要是因为笔趣阁的源代码没有 ...

  6. Python实用案例,Python脚本,Python实现批量下载百度图片

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...

  7. 如何用python搜索要用的素材_一篇文章教会你利用Python网络爬虫获取素材图片

    [一.项目背景] 在素材网想找到合适图片需要一页一页往下翻,现在学会python就可以用程序把所有图片保存下来,慢慢挑选合适的图片. [二.项目目标] 1.根据给定的网址获取网页源代码. 2.利用正则 ...

  8. python爬取素材图片代码_一篇文章教会你利用Python网络爬虫获取素材图片

    [一.项目背景] 在素材网想找到合适图片需要一页一页往下翻,现在学会python就可以用程序把所有图片保存下来,慢慢挑选合适的图片. [二.项目目标] 1.根据给定的网址获取网页源代码. 2.利用正则 ...

  9. 手把手教你用Python网络爬虫获取壁纸图片

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 桃之夭夭,灼灼其华. /1 前言/ ...

最新文章

  1. 那些年我们一起追过的缓存写法(二)
  2. 基于nginx实现minio分布式集群访问的负载均衡配置示例
  3. 00018计算机应用基础2019年4月,2019年4月自考计算机应用基础考前试题和答案00018.pdf...
  4. php控制字数方法,php处理字数过多的方法
  5. .network 中文文档_以太坊链下支付网络Raiden API中文文档
  6. android 之日期选择器,Android GUI 之日期选择器(DatePicker)
  7. thymeleaf条件表达式
  8. 口语化讲某些软件如BT,电驴,向日葵等穿透内网原理
  9. C++自学17:goto
  10. 云原生与数据中台,企业数字化转型的“正确打开方式”
  11. java 游戏 异步框架_基于Java的轻量级异步编程框架
  12. ZYNQ嵌入式开发基础教程
  13. D3D11 自由视角相机
  14. 服务器就是一台性能好的电脑吗,科普:什么是服务器? 服务器与普通电脑有何区别?...
  15. Revit的二次开发带来的赢利点和后续故事
  16. Win10电脑桌面上没有‘我的电脑’图标
  17. python日历gui_[代码全屏查看]-Python版的农历日历Calendar,功能简单
  18. 密码学系列(三):区块链+密码学基础知识
  19. 转转和闲鱼哪个流量大?哪个用户多?
  20. oracle 执行删除索引报错,Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态...

热门文章

  1. 基于opencv的 SNR,GAMMA,色差,饱和度,曝光误差,白平衡误差的自动化算法开发
  2. 关于web项目播放AMR格式音频的问题
  3. Unity3D摄像机远、近切面绘制
  4. 共享汽车充电桩方案开发详解
  5. tesra内测阶段在线GPU的使用
  6. 高精度定位理论及应用
  7. Android与HEIF格式图片适配方法
  8. html5滑动删除置顶,js实现移动端向左滑动删除效果
  9. html source type mp4,html5 – 获取MediaSource.isTypeSupported的mime类型
  10. 解决 升级到Fedora 26后,VirtualBox、Remmina远程桌面等内部不能使用 Win, Ctrl+TAB等快捷键