0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过分析ajax中信息爬取图片

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-23 17:00 次阅读

通过本案例解析ajax请求返回的信息下载图片

爬取url地址:https://pic.sogou.com/pics?query=动物

分析:

分析url地址:每页25条数据,共计10页

第1页:https://pic.sogou.com/napi/pc/searchList?mode=1&start=0&xml_len=48&query=动物
第2页:https://pic.sogou.com/napi/pc/searchList?mode=1&start=48&xml_len=48&query=动物
第3页:https://pic.sogou.com/napi/pc/searchList?mode=1&start=96&xml_len=48&query=动物

通过分析得出请求改变start参数就可以改变页数

具体实现代码:

import requests
import os

class ImageSougou(object):
   url = 'https://pic.sogou.com/napi/pc/searchList'
   save_dir = './sougou' # 文件保存的路径
   count = 0
   # 初始化
   def __init__(self, word):
       self.word = word
       self.dir_path = os.path.join(self.save_dir, word)
       self.params = {
           'query': word,
           'mode': '1',
           'start': '0',
           'xml_len': 48,
       }
       self.headers = {
           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36',
       }
       # 创建保存图片的文件夹
       self.folder_exist(self.dir_path)
       self.last_img_url = ''
       self.current_page = 0
   
   # 请求包含图片url的网页
   def parse(self):
       while True:
           self.params['start'] = str(self.current_page*48)
           response = requests.get(url=self.url, headers=self.headers, params=self.params)
           response.encoding='utf8'
           data = response.json()['data']['items']
           if data:
               for img_info in data:
                   img_url = img_info['picUrl']
                   self.download(img_url)
               self.current_page += 1
           else:
               break
   # 下载一张图片
   def download(self, img_url, img_type='jpg'):
       self.count += 1
       print('正在下载第%d张图片...'%self.count, img_url)
       try:
           response = requests.get(img_url)
       except Exception as e:
           print('下载失败:', img_url)
           return None
       img_name = img_url.split('/')[-1]
       img_path = os.path.join(self.dir_path, img_name)
       try:
           with open(img_path, 'wb') as f:
               f.write(response.content)
       except Exception as e:
           print('下载失败:', img_url)
   def folder_exist(self, dir_path):
       '''
       1. 作用:判断文件夹路径是否存在,不存在则创建
       2. 参数:dir_path:文件夹路径
       3. 返回值:None
       '''
       if not os.path.exists(dir_path):
           os.makedirs(dir_path)
if __name__ == '__main__':
   image = ImageSougou('动物')
   image.parse()

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84693
  • 爬虫
    +关注

    关注

    0

    文章

    82

    浏览量

    6881
收藏 人收藏

    评论

    相关推荐

    中伟视界:矿山智能分析平台通过分级管理报警信息,结合电话、短信通知,提高安全隐患响应速度

    随着矿山行业对安全管理的要求不断提高,智能分析平台中的报警等级管理成为保障矿工生命安全的重要措施。通过电话与短信的有效结合,能够快速、精准地响应各类安全隐患,实现信息的及时传递。矿山企业应重视标准化流程、选择合适平台和持续优化反
    的头像 发表于 12-26 18:14 96次阅读

    中信建投建议关注端侧AI模组机会

    中信建投近日发布的研报指出,随着OpenAI的ChatGPT功能全面接入苹果设备,包括iPhone、iPad和Mac,端侧AI产业的发展正在加速。这一趋势为AI模组市场带来了新的机遇。 据研报分析
    的头像 发表于 12-17 14:05 257次阅读

    电距离和电气间隙计算

    电距离和电气间隙计算
    发表于 10-21 10:51 6次下载

    TPA3110D2如何设置通过分压设置PLIMT呢?

    TPA3110D2的TINA模型,未找到GVDD,该如何设置通过分压设置PLIMT呢
    发表于 09-29 07:49

    如何理解PCB设计的电距离?

    一站式PCBA智造厂家今天为大家讲讲PCB设计电距离要求与走线规则有哪些?PCB设计电距离要求与走线规则。在PCB设计中,电距离和走线规则是关键的考虑因素,尤其是在高压电路和高频电路的设计中
    的头像 发表于 08-15 09:23 1113次阅读

    QFN锡不好如何解决?—SMT锡膏

    QFN封装的芯片IC,侧面引脚锡是个大难题,经常会遇到一些客户反馈:qfn锡不好怎么解决?qfn芯片引脚标准上锡高度如何确定?qfn侧面不锡?下面由深圳佳金源锡膏厂家来讲解一下:一、QFN锡膏
    的头像 发表于 07-17 16:07 1041次阅读
    QFN<b class='flag-5'>爬</b>锡不好如何解决?—SMT锡膏

    电距离是根据什么确定的

    电距离(Creepage Distance)是指在电气设备中,两个导体之间沿绝缘材料表面的距离。它是一个重要的电气参数,用于评估电气设备在正常工作和故障条件下的绝缘性能。电距离的确定涉及到多个
    的头像 发表于 07-12 15:39 981次阅读

    电距离用什么检测设备

    电距离是指在电气设备中,不同电位的导体之间,通过绝缘材料隔离的最短距离。电距离的检测对于确保电气设备的安全运行至关重要。本文将介绍电距离的检测设备及其使用方法。 一、
    的头像 发表于 07-12 15:37 584次阅读

    电距离与电压的对应关系

    电距离(Creepage Distance)是电气设备中的一个重要概念,它指的是在绝缘材料表面,沿着绝缘体表面或边缘,从带电部分到接地部分或不同电位部分之间的最短距离。电距离的大小直接影响
    的头像 发表于 07-12 15:35 2890次阅读

    通过视频帧提取及批量模转换实现基于STC32的点阵LED动画播放

    通过视频帧提取及批量模转换实现基于STC32的点阵LED动画播放
    的头像 发表于 06-27 02:16 385次阅读
    <b class='flag-5'>通过</b>视频帧提取及批量<b class='flag-5'>取</b>模转换实现基于STC32的点阵LED动画播放

    HarmonyOS开发实例:【图片编辑应用】

    通过动态设置元素样式的方式,实现几种常见的图片操作,包括裁剪、旋转、缩放和镜像。
    的头像 发表于 04-23 09:42 453次阅读
    HarmonyOS开发实例:【<b class='flag-5'>图片</b>编辑应用】

    视觉分析中,二值化与灰度图片的数据传导问题

    求助大佬,视觉分析中,需要做Profile分析,如图,怎么让Profile以灰度图片分析。(图中是以二值化图片做的
    发表于 04-08 17:26

    pcb的电距离之解决方案大全

    pcb的电距离之解决方案大全
    的头像 发表于 03-14 15:26 1640次阅读

    鸿蒙开发教学-图片的引用

    该接口通过图片数据源获取图片,支持本地图片和网络图片的渲染展示。其中,src是图片的数据源。
    的头像 发表于 02-01 17:36 704次阅读
    鸿蒙开发教学-<b class='flag-5'>图片</b>的引用

    鸿蒙HarmonyOS引用图片的方法

    前言 Image通过调用接口来创建,接口调用形式如下:   Image(src: string | Resource | media.PixelMap)   该接口通过图片数据源获取图片
    的头像 发表于 02-01 14:35 1046次阅读
    鸿蒙HarmonyOS引用<b class='flag-5'>图片</b>的方法