Python爬取MidJourney历史图片【仅供参考学习使用】

这篇具有很好参考价值的文章主要介绍了Python爬取MidJourney历史图片【仅供参考学习使用】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、 需求概要

使用MidJourney时,

在https://www.midjourney.com/app/这里有接口https://www.midjourney.com/api/app/recent-jobs/?amount=35&dedupe=true&jobStatus=completed&jobType=upscale&orderBy=new&page=3&prompt=undefined&refreshApi=0&searchType=advanced&service=null&toDate=2023-06-16+09%3A50%3A17.379092&type=all&userId=b12e169c-f609-4fd6-b917-11c2deaa8cff&user_id_ranked_score=null&_ql=todo&_qurl=https%3A%2F%2Fwww.midjourney.com%2Fapp%2F,返回的json串中有图片的相关信息,要把整个json串都存下来。

2、 实现思路

(1)在翻页的时候,接口中的page值会发生变化,所以可以通过循环遍历page的值来实现爬取页面信息,目前发现page最大的值为50,所以可以 for page in range(50)

(2)接口中还有很多属性,如下:

属性名 猜测作用
amount 35 一页包含的图片数量(目测最大50)
dedupe true 去重(是)
jobStatus completed 图片状态(完成)
jobType upscale 图片类型(高级),对应页面上的All,Grids(网格状),Upscales
orderBy new 排序(按最新),对应页面上的Hot,New,Top,Favorited
page 3 当前页码(目测最大为50)
prompt undefined 提示(未定义)
refreshApi 0
searchType advanced
service null
toDate 2023-06-16 09:50:17.379092 这个等会得细看下,这个属性貌似只有orderby为new的时候会有
type all
userId b12e169c-f609-4fd6-b917-11c2deaa8cff
user_id_ranked_score null
_ql todo
_qurl https://www.midjourney.com/app/
isPublished true 这个对应页面上的ispublished选项(感觉不用特殊设置)

通过改变某些属性的值也许能找到相对正确的爬取策略

(3)可以简单地将爬取到的大量json串保存在txt中,等待后续的处理

3、具体实现

通过研究发现,orderby使用new或者enqueue_time的时候,再加上toDate参数,就会返回固定的json串,page最大值为50,amount最大值为50,也就是说,每次循环50次page最多爬取到50*50=2500张图,然后再取最后得到的图片的enqueue_time为新的toDate,进行下一轮的50次循环爬取,如此反复,就可以实现将某日前的所有历史图片数据全部爬取下来。注意每次爬取间睡个几秒,免得被封掉。文章来源地址https://www.toymoban.com/news/detail-644061.html

4、代码

import json
import requests
import random
import time


#
#                               _ooOoo_
#                              o8888888o
#                              88" . "88
#                              (| -_- |)
#                              O\  =  /O
#                           ____/`---'\____
#                         .'  \\|     |//  `.
#                        /  \\|||  :  |||//  \
#                       /  _||||| -:- |||||-  \
#                       |   | \\\  -  /// |   |
#                       | \_|  ''\---/''  |   |
#                       \  .-\__  `-`  ___/-. /
#                     ___`. .'  /--.--\  `. . __
#                  ."" '<  `.___\_<|>_/___.'  >'"".
#                 | | :  `- \`.;`\ _ /`;.`/ - ` : | |
#                 \  \ `-.   \_ __\ /__ _/   .-` /  /
#            ======`-.____`-.___\_____/___.-`____.-'======
#                               `=---='
#            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#                       佛祖保佑        永无bug
#                       成功爬取        不会被ban


# 构建请求头:
headers = {
                # 这里需要自己构建请求头
}
# 切分url
big_pre_url = f"https://www.midjourney.com/api/app/recent-jobs/?amount=50&dedupe=true&jobStatus=completed&orderBy=enqueue_time&page="
# 维护一个数组,用于循环
# 需要填入开始爬取的日期
# 可以使用datatime操作时间参数,这里简单点就用字符串就可以
toDate = ['']
# 创建一个标记符,用于控制循环结束
tag = True
# 开始循环爬取
print("开始爬取")
while tag:
    try:
        # 拆分url
        small_pre_url = f"&prompt=undefined&refreshApi=0&searchType=advanced&service=null&toDate=2023-"
        small_after_url = f"+07%3A21%3A03.591348&type=all&userId=b12e169c-f609-4fd6-b917-11c2deaa8cff&user_id_ranked_score=null&_ql=todo&_qurl=https%3A%2F%2Fwww.midjourney.com%2Fapp%2F"
        # 从维护的数组中更新url,进行循环爬取
        big_after_url = small_pre_url + toDate[-1] + small_after_url
        # 内部循环page从0到50
        for page in range(1, 51):
            print("正在爬取toDate为:" + str(toDate[-1]) + ",page为:" + str(page))
            # 睡一小会,免得号没了
            time.sleep(random.randint(5, 10))
            # 拼接url
            url = big_pre_url + str(page) + big_after_url
            # 发出请求得到响应
            response = requests.get(url=url, headers=headers).json()
            # json入库
            with open("images_json.txt", "a+", encoding="utf-8") as f:
                f.write(str(response) + '\n')
            # 维护下一个循环
            new_toDate = response[49]["enqueue_time"][5:10:]
        # 将最新的数据插到toDate中用于下一轮循环
        toDate.append(new_toDate)
    except Exception as e:
        tag = False
        print("-----------------出现异常,终止循环-----------------")
        print("异常信息为:" + e)
        print("当前 toDate:" + str(toDate[-1]) + "当前page:" + str(page))

到了这里,关于Python爬取MidJourney历史图片【仅供参考学习使用】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬取pexels图片

    研究Python爬虫,网上很多爬取pexels图片的案例,我下载下来运行没有成功,总量有各种各样的问题。 作为菜鸟初学者,网上的各个案例代码对我还是有不少启发作用,我用搜索引擎+chatGPT逐步对代码进行了完善。 最终运行成功。特此记录。 运行环境:Win10,Python3.10、 Google

    2023年04月11日
    浏览(69)
  • Python爬虫 爬取图片

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键,选择另存为。但有些图片鼠标右键的时候并没有另存为选项,还有办法就通过就是通过

    2024年02月13日
    浏览(56)
  • python爬虫 爬取网页图片

    目录 一:爬虫基础 二:安装html解析的python工具 三:爬取网页图片 爬虫基本过程: 1.请求标头 headers 2.创建一个会话 requests.Session 3.确定请求的路径 4.根据路径获取网页资源(HTML文件) 5.解析html文件BeautifulSoup div a 标签 获取对应的图片 6.建立网络连接进行下载  创建出下载的图

    2024年02月02日
    浏览(57)
  • python爬取图片(thumbURL和html文件标签分别爬取)

      当查看源代码,发现网址在thumbURL之后时,用此代码:   #  当用requests.get请求得到的源代码是html文件,每一行是一个标签时,可以用此代码

    2024年01月21日
    浏览(50)
  • python入门实战:爬取图片到本地

        简单记录一下爬取网站图片保存到本地指定目录过程,希望对刚入门的小伙伴有所帮助!     目标网站就是下图所示页面: 实现步骤:     1.爬取每页的图片地址集合     2.下载图片到本地     3. 获取指定页数的页面路径 以下是实现代码:

    2024年02月07日
    浏览(36)
  • Python应用开发——爬取网页图片

    当我们需要从网页上面下载很多图片的时候,一个一个手动保存实在是太累人了。那么有没有批量下载的办法呢? 答案是有的,Python爬虫就可以完美的做到这一点,而且作为一个Python的初学者,我可以很负责任的告诉你,这门语言入门挺简单的,特别是对于那些有其他编程语

    2024年02月02日
    浏览(45)
  • python 使用requests爬取百度图片并显示

    爬虫(Spider),又称网络爬虫(Web Crawler),是一种自动化程序,可以自动地浏览互联网上的网站,并从中抓取数据。它主要通过 HTTP / HTTPS 协议访问网页,并将访问到的网页内容进行解析和分析,从而提取有用的数据,例如新闻、评论、图片、视频等。爬虫在搜索引擎、大数

    2024年02月03日
    浏览(43)
  • python基于Selenium方法爬取网页图片

    selenium是一个用于web应用程序的自动化测试工具,通过Selenium可以写出自动化程序,拟人在浏览器对网页进行操作。selenium可以编写出自动化程序,简化手动保存的部分。 requests库可以向第三方发送http请求,是一个用于网络请求的模块,通常以GET方式请求特定资源,请求中不应

    2024年02月03日
    浏览(58)
  • python-爬虫-xpath方法-批量爬取王者皮肤图片

    球员:乔尔-恩比德 - - - 球队:76人 球员:卢卡-东契奇 - - - 球队:独行侠 球员:达米安-利拉德 - - - 球队:开拓者 爬取一张图片 该角色有7个皮肤 爬取7个图片 获取这7个皮肤的名字 保存图片 获取所有英雄皮肤 把该行网址复制到网址栏,会自动下载该文件 https://pvp.qq.com/web20160

    2024年02月09日
    浏览(52)
  • 【Python爬虫开发实战①】使用urllib以及XPath爬取可爱小猫图片

    个人主页 :为梦而生~ 关注我一起学习吧! 专栏 :python网络爬虫从基础到实战 欢迎订阅!后面的内容会越来越有意思~ 往期推荐 : 【Python爬虫开发基础⑦】urllib库的基本使用 【Python爬虫开发基础⑧】XPath库及其基本用法 我们在之前已经有8篇文章讲述基础知识了,下面我们

    2024年02月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包