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中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
Python实现去除代码前行号的方法
Mar 10 Python
python实现mysql的单引号字符串过滤方法
Nov 14 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
python使用turtle库绘制时钟
Mar 25 Python
Python连接Redis的基本配置方法
Sep 13 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
python多任务及返回值的处理方法
Jan 22 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
Pycharm小白级简单使用教程
Jan 08 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 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
队列在编程中的实际应用(php)
2010/09/04 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
几行js代码实现自适应
2017/02/24 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
浅析VUE防抖与节流
2020/11/24 Vue.js
Pandas 按索引合并数据集的方法
2018/11/15 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
python输出数学符号实例
2020/05/11 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
一名毕业生的自我鉴定
2013/12/04 职场文书
低碳环保演讲稿
2014/08/28 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
2016小学新学期寄语
2015/12/04 职场文书
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技