python爬虫获取京东手机图片的图文教程


Posted in Python onDecember 29, 2017

如题,首先当然是要打开京东的手机页面

python爬虫获取京东手机图片的图文教程

python爬虫获取京东手机图片的图文教程

因为要获取不同页面的所有手机图片,所以我们要跳转到不同页面观察页面地址的规律,这里观察第二页页面

python爬虫获取京东手机图片的图文教程

由观察可以得到,第二页的链接地址很有可能是

https://list.jd.com/list.html?cat=9987,653,655&page=2

那么对应第n页的地址就是

https://list.jd.com/list.html?cat=9987,653,655&page=n

我们就可以利用这个规律在编程的时候打开自己想要获取的页面了

接着我们查看页面的源代码,观察图片链接的规律

python爬虫获取京东手机图片的图文教程

python爬虫获取京东手机图片的图文教程

我们使用在源代码的页面使用ctrl+f查找,然后在查找框里面输入页面第一台手机的名字 “vivo X9s 全网通 4GB+64GB 玫瑰金 移动” 快速定位到图片链接附近的代码,便于后面编程对图片范围进行筛选

python爬虫获取京东手机图片的图文教程

可以看到,上图的画红线的三个部分,<div id="plist" 在这一页中是唯一出现的一个元素,而且离图片链接比较近,所以可以作为筛选页面的开头位置

<img width=“220”……这个是手机图片的信息,我们要获取的是后面

//img14.360buyimg.com/n7/jfs/t6088/107/5539077608/409616/7f98b2bb/596c2edaN9792cd20.jpg

这个链接,但是观察发现后面也有一个图片链接

img data-sku="5291744" width="25" height="25" class="loading-style2" src="//img14.360buyimg.com/n9/jfs/t6088/107/5539077608/409616/7f98b2bb/596c2edaN9792cd20.jpg"

这个很明显不是我们要找的手机图片链接

所以我们要使用正则表达式将真正的图片链接筛选出来,观察发现这两个图片链接的区别在于手机图片链接里面含有n7元素,而另外一个图片链接含有n9元素,这样子我们的正则表达式就可以表示为pat2 = '//.+?/n7/.+?\.jpg'

接着我们要找到这个页面最后一张手机图片的位置,方便找出可以作为筛选页面的结束位置,方法和上面类似,在源代码搜索框输入 小米(MI) 红米Note4X 手机 香槟金 全网通 3GB+32GB 定位到页面最后一张图片位置

python爬虫获取京东手机图片的图文教程

可以看到,下面<div class="page clearfix">在该页面中是唯一的,而且比较接近最后一张手机图片附近的链接,所以可以作为筛选结尾位置的元素,其实筛选的元素只要满足唯一并且接近我们要获取的目标,那么也可以作为我们要选取的元素

经过上面准备之后,我们得出了大概的思路

1首先进行第一次筛选,使用正则表达式pat1 = '<div id="plist".+<div class="page clearfix">'将图片链接的范围大概筛选出来

2然后进行第二次筛选,使用正则表达式pat2 = '//.+?/n7/.+?\.jpg'将手机图片链接筛选出来

3使用urllib.urlretrieve保存链接图片到本地

下面给出python代码

# -*- coding: UTF-8 -*- 
import re 
import urllib2 
import urllib 
 
def craw(url, page): 
 html1 = urllib2.urlopen(url).read() 
 html1 = str(html1) 
 pat1 = '<div id="plist".+<div class="page clearfix">' 
 result1 = re.compile(pat1, re.DOTALL).findall(html1) 
 #获取第一次筛选结果 
 result1 = result1[0] 
 #*匹配0个或者多个前面表达式 
 #.匹配任意字符,加上re.dotall包括换行符 
 #+匹配1个或者多个前面表达式 
 #?非贪婪匹配,就是只匹配一组 
 #筛选出图片链接列表 
 pat2 = '//.+?/n7/.+?\.jpg' 
 imagelist = re.compile(pat2).findall(result1) 
 #x作为图片文件的顺序 
 x=1 
 
 for imageurl in imagelist: 
 imagename = "C:/Users/Administrator/Desktop/jdphone_img/" + str(page) + str(x) + ".jpg" 
 imageurl = "http:" + imageurl 
 try: 
  #保存图片 
  urllib.urlretrieve(imageurl, filename=imagename) 
 except urllib2.URLError as e: 
  #hasattr判断对象里面是否有name属性 
  if hasattr(e, "code"): 
  x+=1 
  if hasattr(e, "reason"): 
  x+=1 
 x+=1 
 
for i in range(1, 3): 
 url = "https://list.jd.com/list.html?cat=9987,653,655&page=" + str(i) 
 craw(url, i)

注意:我这里只保存了第一二页的手机图片,在进行第二次筛选的时候正则表达式之所以会加了一个"?"进行非贪婪匹配,也就是一次只筛选出一张手机图片链接,如果不加这个非贪婪匹配那么我们会把第一个含有“//”到最后一个结尾含有.jpg之间的所有内容都会筛选出来,显示是不符合的,在这里建议可以把正则表达式的?去掉,然后看一下输出结果,去体会一下非贪婪匹配是怎么样的。

Python 相关文章推荐
pytyon 带有重复的全排列
Aug 13 Python
python计算最大优先级队列实例
Dec 18 Python
Python实现堆排序的方法详解
May 03 Python
Python 实现简单的shell sed替换功能(实例讲解)
Sep 29 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
python多线程实现TCP服务端
Sep 03 Python
Python实现寻找回文数字过程解析
Jun 09 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
如何一键升级Python所有包
Nov 05 Python
python3实现简单飞机大战
Nov 29 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 #Python
基于并发服务器几种实现方法(总结)
Dec 29 #Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 #Python
python操作列表的函数使用代码详解
Dec 28 #Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 #Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 #Python
python3使用scrapy生成csv文件代码示例
Dec 28 #Python
You might like
用穿越火线快速入门php面向对象
2012/02/22 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
Django实现全文检索的方法(支持中文)
2018/05/14 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
深入了解Django中间件及其方法
2019/07/26 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
教师档案管理制度
2014/01/23 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
出售房屋协议书范本
2014/10/06 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
检讨书范文
2019/04/16 职场文书