爬取搜狗图片代码分析

  • 代码
    • 代码功能
    • 代码
  • 代码解析
  • 总结

代码

代码功能

从搜狗网页下载 n 张指定分类的图片并保存到指定的文件夹。

代码

# 导入相关的库
import requests
import json
import urllib
import os# 爬取图片的保存路径
output_dir = "./images/"# 爬取搜狗搜图的函数
def getSogouImag(category, length, path):'''参数category:指要爬取图片的类型,字符串格式,如:'壁纸'参数length:指要爬取多少张,整型参数path:存储路径'''n = lengthcate = category# http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E7%BE%8E%E5%A5%B3&tag=%E5%85%A8%E9%83%A8&start=0&len=15imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=' + cate + '&tag=%E5%85%A8%E9%83%A8&start=0&len=' + str(n) + '&width=1536&height=864')jd = json.loads(imgs.text)jd = jd['all_items']i = 0imgs_url = []for j in jd:imgs_url.append(j['pic_url'])print(imgs_url[i])i = i+1m = 0for img_url in imgs_url:print('***** ' + str(m) + '.jpg *****' + '   Downloading...')urllib.request.urlretrieve(img_url, path + str(m) + '.jpg')m = m + 1print('Download complete!')# 检查是否存在路径,若不存在,则创建
if not os.path.exists(output_dir):os.makedirs(output_dir)# 爬取图片
getSogouImag('壁纸', 10, output_dir)

代码解析

整个代码逻辑是:
1.网络请求数据
2.解析数据得到图片地址
3.根据图片地址请求数据
4.将图片保存到指定文件夹。

  • 模块导入
# 导入相关的库
import requests
import json
import urllib
import os

其中 requests 是网络相关的库,用于模拟浏览器打开网址 get 网络数据,json 库用于解析得到的网络数据。urllib 和 requests 库差不多,requests 将 urlib 进行了更高级的封装,不用人为的编码解码,将其自动化。os 库是Python标准库,包含几百个函数,常用的有路径操作、进程管理、环境参数等,在这里我们用于路径管理。

  • 拼接网络地址,请求网络数据
# 爬取搜狗搜图的函数
def getSogouImag(category, length, path):'''参数category:指要爬取图片的类型,字符串格式,如:'壁纸'参数length:指要爬取多少张,整型参数path:存储路径'''n = lengthcate = category# http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E7%BE%8E%E5%A5%B3&tag=%E5%85%A8%E9%83%A8&start=0&len=15imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=' + cate + '&tag=%E5%85%A8%E9%83%A8&start=0&len=' + str(n) + '&width=1536&height=864')jd = json.loads(imgs.text)

这里我们定义了 getSogouImag(category, length, path): 函数,参数为图片类型,数量,保存地址。
然后将 category 和 length 替换到链接里。
使用 requests.get 发起网络请求,此时 imgs 存储了反馈的数据。
通过 json.loads 将反馈数据载入到 jd 变量中。此时我们使用 printf 将jd打印出来。内容如下:


{"category": "壁纸","tag": "全部","startIndex": 0,"maxEnd": 1112,"items": null,"all_items": [{"id": 10749526,"did": 0,"thumbUrl": "https://img04.sogoucdn.com/app/a/100520020/6a793eed6c92347c74e6e2aa765782e0","thumb_width": 480,"thumb_height": 360,"thumb_size": 0,"sthumbUrl": "https://img03.sogoucdn.com/app/a/100520024/4dd204bb180a72b824bcce2fdb3ed271","sthumb_width": 400,"sthumb_height": 300,"bthumbUrl": "https://img03.sogoucdn.com/app/a/100520076/1c325e6f44154738b51a1986e143167f","bthumb_width": 160,"bthumb_height": 120,"pic_url": "https://img01.sogoucdn.com/app/a/100520021/48472f2b887d712605029363865daa27","width": 1024,"height": 768,"size": 256556,"ori_pic_url": "http://b.zol-img.com.cn/desk/bizhi/image/5/1024x768/1419384721150.jpg","ext_url": null,"page_title": null,"page_url": "http://desk.zol.com.cn/bizhi/4892_60766_2.html","title": "可爱猫咪壁纸桌面","tags": ["动物", "可爱", "优质"],"group_mark": null,"group_index": 0,"publish_time": null,"surr1": null,"surr2": null,"category": null,"weight": 0,"deleted": 0,"pfrom": 0,"wapLink": null,"webLink": null}, {...}, {...}, {...}, {...}, {...}, {...}, {...}, {...}, {...}],"newsResult": null,"itemsOnPage": 0,"fromItem": null,"groupList": null,"resolution": {"width": 1024,"height": 768}
}

分析数据可知,图片的地址都存在 all_items 的 json 数组对象中。

  • 获取图片地址
    jd = jd['all_items']i = 0imgs_url = []for j in jd:imgs_url.append(j['pic_url'])print(imgs_url[i])i = i+1

将上面得到的网络数据的 all_items 数组提取出来。
定义 for 循环去轮询数组,提取出图片的 pic_url 地址存储到 imgs_url 数组中。
我们用 printf 将 imgs_url 数组打印出来,结果如下:

https://img01.sogoucdn.com/app/a/100520021/48472f2b887d712605029363865daa27
https://img02.sogoucdn.com/app/a/100520021/da5a7df38125a56e447a819759088716
https://img04.sogoucdn.com/app/a/100520021/e074ebc04b637e770d3ed053b7df7f87
https://img02.sogoucdn.com/app/a/100520021/819998b5533c43c3980cb9fe65aed7ab
https://img01.sogoucdn.com/app/a/100520021/ff199ed325c200ad1fb4850ab5307712
https://img02.sogoucdn.com/app/a/100520021/9815f5e941ebea12c67f978230949f5e
https://img04.sogoucdn.com/app/a/100520021/c57392860425a763252ee211abfa882b
https://img01.sogoucdn.com/app/a/100520021/bf55778452fcce54cb6bc6a3bb51d257
https://img02.sogoucdn.com/app/a/100520021/dedb945a337f3f32287783887c54e3fb
https://img01.sogoucdn.com/app/a/100520021/68b6b51aee44130ba7748fb4a9adc54c
  • 根据地址,下载图片到指定位置
    m = 0for img_url in imgs_url:print('***** ' + str(m) + '.jpg *****' + '   Downloading...')urllib.request.urlretrieve(img_url, path + str(m) + '.jpg')m = m + 1print('Download complete!')

定义 for 循环去轮询地址,下载图片数据。
这里主要用到的方法是 urlretrieve 函数,其用法如下:

urlretrieve(url, filename=None, reporthook=None, data=None)* 参数url:下载链接地址* 参数filename:指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)* 参数reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。* 参数data:指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,filename 表示保存到本地的路径,header表示服务器的响应头
  • 创建图片保存路径,调用爬取函数下载图片
# 检查是否存在路径,若不存在,则创建
if not os.path.exists(output_dir):os.makedirs(output_dir)# 爬取图片
getSogouImag('壁纸', 10, output_dir)

首先判断文件夹路径是否存在,保证文件夹存在,然后调用函数下载图片。

总结

由此代码可以看出 Python 的特点:

  • 开发快
    以较少的代码量完成需要的功能。

  • 第三方库齐全
    各种功能都有第三方的库,我们只需要熟悉其API函数用法即可使用其功能。

  • 接近于自然语言
    由于各种库的封装,python 已经非常接近英语,其含义打都可以从其命名理解。因此对于新手来说,尤其是掌握一种其他编程语言的程序员,更容易入门。

综上所述,Python 很适合做工作的工具使用,可以帮助你更快速的处理工作。人和动物的区别就在于人会制造并使用各种工具。

进军Json,以战养战 -- 爬取搜狗图片代码分析相关推荐

  1. 爬虫实践:爬取搜狗图片

    前言 本文中,将通过爬取搜狗图片为例,分析Ajax请求来抓取网页数据 (通过传入关键字,已达到爬取不同类型图片的目的) AJAX引擎其实是一个JavaScript对象,全写是 window.XMLHt ...

  2. python爬取搜狗图片

    python爬取搜狗图片 cond(`""" 对于动态加载的网站图片的获取,我们需要去分析js内容一定要让网页发生加载后去分析,分析network 里的XHR,可以看到需 ...

  3. 使用python爬虫爬取搜狗图片无法获得图片网址

    错误原因 找页面网址时:我是打开一张图片,从上方搜索栏复制的,然后发现了规律 xxxx#did=0 这个0一直往后增加,我把它作为页面规律.试验了一下,这些网址能进入到对应的图片. 然后打开了F12, ...

  4. Python爬虫实战 | (9) 爬取搜狗图片

    本篇博客我们将爬取百度图片,输入搜索词,爬取与搜索词相关的图片. 首先打开搜狗图片https://pic.sogou.com/,比如搜索"猫",此时的URL如下: https:// ...

  5. 利用requests库爬取搜狗图片并存入文件夹下

    看了一篇帖子,https://www.cnblogs.com/dearvee/p/6558571.html 这篇帖子作为一个引导,摸索着完成了第一个爬虫,现在将过程总结如下. 搜狗图片地址为 http ...

  6. 不上浏览器也可以下载美图了(python 批量爬取搜狗图片)

    批量下载搜狗图片 -  操作步骤:  - (1)复制代码到本地,打开python项目  - (2)运行项目,根据提示输入搜索信息,即可下载图片到相应文件夹 # -*- coding:utf-8 -*- ...

  7. Scrapy定制图片管道爬取搜狗图片(Ajax接口)

    进入页面,发现图片是动态加载的.通过Ajax加载json文件.所以对request header的url进行观察,发现start参数每次加15.所以爬取过程并不难解决,关键是图片的存储 爬的过程还是会 ...

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

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

  9. 爬虫------爬取搜狗图片

    一.单线程 # author:WN # datetime:2019/10/30 9:07 import requests import redef image_urls():search_name = ...

最新文章

  1. win10怎么进入修复计算机,windows10安全模式怎么修复系统_win10安全模式如何修复电脑...
  2. python socket poll
  3. 赶在 2018 年前推荐 30 个最火爆的开源库
  4. 归并排序时间复杂度_一文带你读懂排序算法(四):归并算法
  5. 读取页面上所有的checkbox
  6. 我想牵你的手,从心动到古稀
  7. Java 登录拦截器
  8. weblogic控制台超时时间_WebLogic如何设置session超时时间
  9. 搜集的一些电压跟随器的问题和回答
  10. Java实现观察者模式
  11. (10.1.4)拟物设计
  12. 线性代数之 伪逆矩阵
  13. 介词 by during for from
  14. python语言的三种基本结构_Python语言基础分支语句、循环语句.PPT
  15. 如何用nginx部署静态网站
  16. MTP 模式 pc端文件和文件管理其中的不同步
  17. 有关input输入框内容改变后的触发事件
  18. centos GPU tensorflow pytorch 深度学习 环境搭建
  19. 移动小工具——利用python进行综合调度班的区县信息处理
  20. 1.4 面试问题整理: ATM机取款

热门文章

  1. 历届奥运会中国金牌榜 !
  2. 用Spirent Test Center测试交换机Head of Line(HOL)Blocking
  3. WordNet 简介
  4. 音视频开发——通信直播协议和视频推流丨RTMP-RTSP
  5. C#_摄像头图像转换为Bitmap格式及绘制十字线
  6. oracle的redolog停止,ORACLE REDO LOG 频繁切换问题解决与分析
  7. 计算机专业求职体验报告,求职体验心得报告大合集.doc
  8. unity 只输入中英数_UITextField只限中文、英文、数字输入和限制字符个数的实现方法...
  9. Linux进程top命令作用是,linux top命令详解
  10. MRPII/ERP简单总结