前面两篇博客我们分别利用requests请求库抓取页面(链接https://blog.csdn.net/MG1723054/article/details/81604116)和利用selenium模拟浏览器来获取页面数据(链接https://blog.csdn.net/MG1723054/article/details/81630769),这些获取信息的方法也有弊端,对于requests请求库在抓取网页时候,得到的结果可能与浏览器中看到的不一样,这是因为requests获取的是原始的HTML文档,而现实的网页中,浏览器可能经过JavaScript处理后生成的结果,这些数据可能是ajax加jason载的,或者通过JavaScript渲染的;利用selenium抓取数据时候,主要的问题是效率不高。

下面我们主要来讨论通过分析ajax来获取json数据,获取需要的网址,利用requests模拟ajax请求,最后获得我们想要的数据。

这里,我们用搜狗美女网址为例,如图所示为网页源代码,在源代码中我们没有找到那些图片的url链接。

于是,我们打开开发者模式,如下图所示,点击network按钮,按F5,我们可以看到一系列的请求,我们在XHR中的preview看到一系列的美女图片的ID,以及或图片的url,下拉网页我们看到后面的图片出现时候,XHR请求就增加。然后我们分析不同链接的url的规律,

url=http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jspcategory=%E7%BE%8E%E5%A5%B3&tag=%E5%85%A8%E9%83%A8&start=15&len=15

url=http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jspcategory=%E7%BE%8E%E5%A5%B3&tag=%E5%85%A8%E9%83%A8&start=30&len=15

url=http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jspcategory=%E7%BE%8E%E5%A5%B3&tag=%E5%85%A8%E9%83%A8&start=45&len=15

 

通过分析上面的链接,我们可以先发现对于不同的链接只是start数据改变,规律是15*n(n=1,2,3,),其他的数据均不改变,通过以上分析,我们给出代码,我们在代码里面详细分析每一个程序的意义

# -*- coding: utf-8 -*-
"""
Spyder EditorThis is a NJUer.
"""
import requests
import time
from urllib.parse import urlencode  #网址编码
import json  #导入json库
urls=[]
def image_json (url) :###请求库,利用requests请求构造的链接,然后转化为json格式,然后得到图######片的标题和图片链接。response=requests.get(url,headers={'User-Agent':'Mozilla/5.0'})data=json.loads(response.text)['all_items']for m in range(len(data)) :items={'image_url':data[m]['thumbUrl'],'title':data[m]['title']}yield itemsdef  image_download(item):###下载图片resource=requests.get(item['image_url'])item['title']=item['title'].replace('|','_')item['title']=item['title'].replace('/','_')###改名,因为有些图片中有些字符不符合jpg
###图片命名规范file='C:\\Users\\FangWei\\Desktop\\网络爬虫\\爬取酷狗美女图片\\'+item['title'][0:20]+'.jpg'with open (file,'wb') as f:f.write(resource.content)###将图片下载,放到指定文件夹
def get_image (offest) :   ###get_image函数主要是构造需要的ajax链接base_url='http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?'data={'category':'美女','tag':'全部','start':str(offest*15),'len':'15',}url=base_url+urlencode(data)  ###利用urlencode将字典拼接为一个网址链接return url
def main(offest):time.sleep(1) infor=get_image(offest)  #mian函数内部调用get_image函数#time.sleep(1)for item in  image_json (infor):image_download(item)
if __name__=='__main__' :start=time.time()for x in range(30):   #设置爬取变量,设置30,根据上面分析表示可以爬取30*15张图片         offest=xmain(offest)           #调用主函数main()end=time.time()times=end-startprint(times)

通过上面的代码,我们就可以完成我们所需要的图片,爬取的部分结果如下:

最后,我们可以利用进程中的进程池来提高爬取效率,针对该程序,时间缩短了30s左右,因为在里面加了休息一秒,所以结果有差别,如果将time.sleep(1)删除,两个结果运行时间差不多,这是因为爬取是密集型IO操作,利用进程对其效率提高不大,可以考虑线程和协程(python协程还不太成熟),这方面的只是我会在某个时候贴出来。

附:多进程源代码:

# -*- coding: utf-8 -*-
"""
Created on Thu Jul  5 15:43:59 2018@author: NJUer
"""
# -*- coding: utf-8 -*-
import requests
from multiprocessing.pool  import Pool
import time
from urllib.parse import urlencode
import json
urls=[]
def image_json (url) :response=requests.get(url,headers={'User-Agent':'Mozilla/5.0'})data=json.loads(response.text)['all_items']for m in range(len(data)) :items={'image_url':data[m]['thumbUrl'],'title':data[m]['title']}yield itemsdef  image_download(item):resource=requests.get(item['image_url'])item['title']=item['title'].replace('|','_')item['title']=item['title'].replace('/','_')file='C:\\Users\\FangWei\\Desktop\\网络爬虫\\爬取酷狗美女图片\\'+item['title'][0:10]+'.jpg'with open (file,'wb') as f:f.write(resource.content)
def get_image (offest) :base_url='http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?'data={'category':'美女','tag':'全部','start':str(offest*15),'len':'15',}url=base_url+urlencode(data)return url
def main(offest):time.sleep(1)      infor=get_image(offest)for item in  image_json (infor):image_download(item)
if __name__=='__main__' :start=time.time()pool=Pool()offest=[x for x in range(30)]pool.map(main,(offest))pool.close()pool.join()end=time.time()times=end-startprint(times)

原创不易,如需转载,请注明出处和作者,谢谢。

分析ajax爬取搜狗美女图片相关推荐

  1. python爬虫系列(2):分析Ajax 爬取搜狗高清壁纸

    这次我们来分析一下Ajax(至于Ajax是什么意思请自行百度了,这里就不过多解释),爬取一些高清壁纸,等待下载到本地之后,然后我们再慢慢的筛选这些壁纸.那么这次的目标就是搜狗壁纸,啥1280*720的 ...

  2. 分析Ajax爬取今日头条,下载图片

    这几天打算趁着寒假时间把之前学的爬虫捡回来,发现现在今日头条改了一丢丢.与崔庆才老师有关分析Ajax爬取今日头条街拍美图已经有点出入. 获取搜索结果的ur的方法与崔庆才老师是一样的,这里就不细说了,不 ...

  3. 根据关键字爬取搜狗图库图片

    根据关键字爬取搜狗图库图片 说明:关键字是从excel表格文件中读取的 如果想看爬虫分析过程的可以参考博主之前的写的博客,完整代码如下: ''' @Time : 2019/10/24 15:38 @S ...

  4. 使用Python爬虫爬取网络美女图片

    代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...

  5. [Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图

    [Python3网络爬虫开发实战] --分析Ajax爬取今日头条街拍美图 学习笔记--爬取今日头条街拍美图 准备工作 抓取分析 实战演练 学习笔记–爬取今日头条街拍美图 尝试通过分析Ajax请求来抓取 ...

  6. 手把手带你爬取百度美女图片,Python练手项目!

    本文纯技术角度出发,教你如何用Python爬虫获取百度美女图片--技术无罪. 目标站点 百度图片使用关键字搜索 小姐姐私房照 https://image.baidu.com/ 开发环境 系统:Wind ...

  7. python协程gevent案例:爬取斗鱼美女图片

    分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...

  8. python协程爬取斗鱼美女图片

    分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要的数据 ...

  9. python从网址爬图片协程_python协程gevent案例:爬取斗鱼美女图片

    分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...

最新文章

  1. iMeta期刊顾问James M Tiedje当选中国科学院外籍院士
  2. 谈谈你的GC调优思路?
  3. MQTT和Java入门
  4. 带给你灵感的3D街画艺术设计
  5. KMP算法中NEXT数组的作用以及代码实现
  6. html5支持多中浏览器写法,html5及css3对table表格高亮当前行列的多浏览器兼容写法...
  7. 网络协议从入门到底层原理(6)应用层 - 域名、DNS、DHCP、HTTP(ABNF、HTTP报文格式、请求方法、头部字段、状态码、跨域)、代理、CDN
  8. mysql显示行号,通过表名模糊查找,通过列名模糊查找,常用sql
  9. 如何检查Django版本
  10. python内置函数可以返回数值型序列中所有元素之和_Python内置函数________________用来返回数值型序列中所有元素之和。...
  11. docker gpu 创建 训练环境_基于 Mesos、Docker 和 Nvidia GPU 的深度学习平台实践
  12. 海康威视SDK基于JAVA二次开发
  13. java 英语简历模板下载 百度云_java软件工程师英文简历模板下载
  14. TextToSpeech文本转语音,从开始说话到结束的监听
  15. catia逆向建模步骤_逆向流程及CATIA逆向的一些技巧
  16. 电子信息专业实习报告与总结
  17. 短进程优先调度算法c语言spf,短进程优先的调度算法详解
  18. Pycharm Traceback (most recent call last):
  19. Android结课大作业报告
  20. oracle12c生命周期,Oracle 12c 新特性之: ILM 数据生命周期管理

热门文章

  1. 微信小程序引入iconfont彩色图标
  2. 电子信息工程 大三 实习之前的准备工作
  3. 分享Spark MLlib训练的广告点击率预测模型
  4. 微信小程序(看文档写实例十一)微信小程序课堂宝APP完结总结及github地址
  5. 1-1000以内的完数
  6. Xavier红外相机(IP摄像头)开发记录
  7. Windows 11 官方正式版原版镜像【附下载】
  8. 游戏排行榜-Python实现
  9. 手游创业难吗?该怎么做?
  10. js中获取元素的当前位置