前言

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

你可能需要的工作环境:

Python 3.6官网下载

本地下载

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

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

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

右键图片>>检查

发现我们需要的图片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:

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

发现,有点接近我们需要的元素了,点开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/壁纸/')

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

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

总结

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

本文标题: Python爬取网页中的图片(搜狗图片)详解

本文地址: http://www.cppcns.com/jiaoben/python/182909.html

python爬取图片-Python爬取网页中的图片(搜狗图片)详解相关推荐

  1. Python小应用1 - 抓取网页中的链接地址

    看到一篇博文上讲到用Python写自动访问博客的功能,里面的核心功能就是抓取网页中的链接,类似一个网页爬虫工具.正好我刚学习Python,就决定自己练习一下.写了一下,原本觉得很简单的东西,搞了半天才 ...

  2. python pptx教学_基于python-pptx库中文文档及使用详解

    个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...

  3. python脚本运行时网络异常_Python中异常重试的解决方案详解

    前言 大家在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理. 原先的流程: def crawl_page(url): pass def log_ ...

  4. 网页中的三种地址详解

    网页中的a标签具有地址跳转的功能,href属性指向跳转的地址. 一.三种地址模式 网络地址分为两种,一种是绝对地址,一种是相对地址. 但是相对地址又可以细分为两种,一种是基于当前目录的相对地址,一种是 ...

  5. python深复制与浅复制_Python中的深拷贝和浅拷贝详解

    要说清楚Python中的深浅拷贝,需要搞清楚下面一系列概念: 变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) [变量-对象-引用] 在Python中一切都是对象,比如说:3, ...

  6. python常用的装饰器库_Python中的各种装饰器详解

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

  7. python object的实例是什么_python中的type和object详解

    这篇博客主要描述Python的新风格对象(new-style objects),如下: 和分别是什么? 用户自定义的类和实例之间是怎么联系的?它们和内置类型又是怎么联系的? 什么是元类(metacla ...

  8. python如何生成等差数列_python numpy函数中的linspace创建等差数列详解

    前言 本文主要给大家介绍的是关于linspace创建等差数列的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. numpy.linspace 是用于创建一个由等差数列构成的一 ...

  9. beautifulsoup爬取网页中的表格_用 Python 爬取网页

    来自公众号:优达学城Udacity 作者:Kerry Parker 编译:欧剃 作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑 ...

最新文章

  1. JavaScript-也来谈--闭包
  2. 原创 | 专家对话:大数据助力健康管理面临的机遇与挑战
  3. ASP.NET MVC3细嚼慢咽---(2)模板页
  4. VCL组件之TLabel、TStaticText和TLabeledEdit
  5. vba mysql连接字符串_分享一个VBA连接mysql数据库的方法
  6. 【Python】ConvergenceWarning: Maximum number of iterations 200 reached. Increase it to improve...
  7. oracle运维平台开发,Oracle数据库运维
  8. Vue学习笔记(三) —— 前后端交互
  9. teechart绘制实时曲线_关于PIII曲线
  10. DirectFB简介以及移植[一]【转】
  11. python Gui基本使用方法
  12. C++银行管理系统源代码
  13. 【PFC】PFC测试指令
  14. scratch基础讲解与小游戏制作(接水果)
  15. 全球最大智慧集装箱码头如何做到“空无一人”?
  16. pyftpdlib 创建ftpserver
  17. python中label函数_让Label像Button一样可以点击
  18. ​关于百度网盘扩容的一点经验分享2022
  19. python基础绘图,教你玩转图表制作
  20. mp4转换成gif无损画质,MP4转换gif一键搞定

热门文章

  1. mysql server id为0_MySQL内核月报 2014.12-MySQL· 答疑释惑·server_id为0的Rotate-阿里云开发者社区...
  2. pip包重新安装mysql_Ubuntu pip 安装 mysql-python包出错
  3. mysql foreign key 设置_mysql foreign key(外键) 说明与实例
  4. android从放弃到精通第10天 勿忘初心
  5. sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID...
  6. CSS 框模型——规定了元素框处理元素内容、内边距、边框和外边距的方式
  7. python 根据字典中值的大小对项进行排序
  8. HDU 6015 Colorful Tree(2017多校)
  9. 深入理解abstract class和interface
  10. opencv编程解决warning C4003: “max”宏的实参不足