Python爬取网页中的图片(搜狗图片)详解


Posted in Python onMarch 23, 2017

前言

最近几天,研究了一下一直很好奇的爬虫算法。这里写一下最近几天的点点心得。下面进入正文:

你可能需要的工作环境:

我们这里以sogou作为爬取的对象。

首先我们进入搜狗图片http://pic.sogou.com/,进入壁纸分类(当然只是个例子Q_Q),因为如果需要爬取某网站资料,那么就要初步的了解它…

Python爬取网页中的图片(搜狗图片)详解

进去后就是这个啦,然后F12进入开发人员选项,笔者用的是Chrome。

右键图片>>检查   

Python爬取网页中的图片(搜狗图片)详解

发现我们需要的图片src是在img标签下的,于是先试着用 Python 的 requests提取该组件,进而获取img的src然后使用 urllib.request.urlretrieve逐个下载图片,从而达到批量获取资料的目的,思路好了,下面应该告诉程序要爬取的url为http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD,此url来自进入分类后的地址栏。明白了url地址我们来开始愉快的代码时间吧:

在写这段爬虫程序的时候,最好要逐步调试,确保我们的每一步操作正确,这也是程序猿应该有的好习惯。笔者不知道自己算不算个程序猿哈。线面我们来剖析该url指向的网页。

import requests
import urllib
from bs4 import BeautifulSoup
res = requests.get('http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD')
soup = BeautifulSoup(res.text,'html.parser')
print(soup.select('img'))

output:

Python爬取网页中的图片(搜狗图片)详解

发现输出内容并不包含我们要的图片元素,而是只剖析到logo的img,这显然不是我们想要的。也就是说需要的图片资料不在url  即 http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD里面。因此考虑可能该元素是动态的,细心的同学可能会发现,当在网页内,向下滑动鼠标滚轮,图片是动态刷新出来的,也就是说,该网页并不是一次加载出全部资源,而是动态加载资源。这也避免了因为网页过于臃肿,而影响加载速度。下面痛苦的探索开始了,我们是要找到所有图片的真正的url 笔者也是刚刚接触,找这个不是太有经验。最后找的位置F12>>Network>>XHR>>(点击XHR下的文件)>>Preview。

Python爬取网页中的图片(搜狗图片)详解

发现,有点接近我们需要的元素了,点开all_items 发现下面是0 1 2 3...一个一个的貌似是图片元素。试着打开一个url。发现真的是图片的地址。找到目标之后。点击XHR下的Headers

得到第二行

Request URL:

http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15&width=1536&height=864,试着去掉一些不必要的部分,技巧就是,删掉可能的部分之后,访问不受影响。经笔者筛选。最后得到的url:http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15  字面意思,知道category后面可能为分类。start为开始下标,len为长度,也即图片的数量。好了,开始愉快的代码时间吧:

开发环境为Win7  Python 3.6,运行的时候Python需要安装requests,

Python3.6 安装requests 应该CMD敲入:

pip install requests

笔者在这里也是边调试边写,这里把最终的代码贴出来:

import requests
import json
import urllib

def getSogouImag(category,length,path):
 n = length
 cate = category
 imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n))
 jd = json.loads(imgs.text)
 jd = jd['all_items']
 imgs_url = []
 for j in jd:
  imgs_url.append(j['bthumbUrl'])
 m = 0
 for img_url in imgs_url:
   print('***** '+str(m)+'.jpg *****'+' Downloading...')
   urllib.request.urlretrieve(img_url,path+str(m)+'.jpg')
   m = m + 1
 print('Download complete!')

getSogouImag('壁纸',2000,'d:/download/壁纸/')

程序跑起来的时候,笔者还是有点小激动的。来,感受一下:

Python爬取网页中的图片(搜狗图片)详解 

Python爬取网页中的图片(搜狗图片)详解 

至此,关于该爬虫程序的编程过程叙述完毕。整体来看,找到需要爬取元素所在url,是爬虫诸多环节中的关键

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
详解Python网络爬虫功能的基本写法
Jan 28 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
解决Python requests 报错方法集锦
Mar 19 Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 Python
Python OpenCV获取视频的方法
Feb 28 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
Python代码实现删除一个list里面重复元素的方法
Apr 02 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
Python3爬虫里关于代理的设置总结
Jul 30 Python
Django-simple-captcha验证码包使用方法详解
Nov 28 Python
Python中time与datetime模块使用方法详解
Mar 31 Python
Python编程之event对象的用法实例分析
Mar 23 #Python
Python中.py文件打包成exe可执行文件详解
Mar 22 #Python
python3中dict(字典)的使用方法示例
Mar 22 #Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 #Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 #Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 #Python
python条件变量之生产者与消费者操作实例分析
Mar 22 #Python
You might like
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
Python简单计算文件夹大小的方法
2015/07/14 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
详解Python 函数参数的拆解
2020/09/02 Python
如何在pycharm中安装第三方包
2020/10/27 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
数据库面试要点基本概念
2013/10/31 面试题
大学毕业生的自我鉴定
2013/11/30 职场文书
小学生新年寄语
2014/04/03 职场文书
关于诚信的活动方案
2014/08/18 职场文书
小石潭记导游词
2015/02/03 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
js之ajax文件上传
2021/05/13 Javascript
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python