m0_70311879 2022-06-10 17:09 采纳率: 100%
浏览 45
已结题

爬取指定类型图片.求解!!

运行这个代码只能爬取关于猫猫类型的图片,只能存在创建好的猫猫文件中。如何做到输入一个指定类型,爬取后保存在指定文件夹中


import requests
import sys
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245."
}


def loadImg(index, maxnum=200):
    loadnum = 0
    while loadnum < maxnum:
        url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=0%2C0&"\
              "fp=detail&logid=11962624943566928039&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=0&lpn=0&st=-1&word="+index+"&z=0&ic=0&hd=undefined&latest=undefined&copyright=undefined&s=undefined&se=&tab=0&width=&height=&face=undefined&istype=2&qc=&nc=&fr=&simics=&srctype=&bdtype=0&rpstart=0&rpnum=0&cs=3464307413%2C312436372" \
              "&catename=&nojc=undefined&album_id=&album_tab=&cardserver=&tabname=&pn=" + str(loadnum) + "&rn=30&gsm=4&1638875927992="

        response = requests.get(url, headers=headers, timeout=3)
        # 请求状态
        if response.status_code == 200:
            print("请求成功!")
        ##json文件-data-【0-30】-hoverurl
        for i in range(30):
            ImgUrl = response.json()['data'][i]["hoverURL"]
            Img = requests.get(url=ImgUrl, headers=headers)
            name = loadnum + i
            # 进度显示
            print(name)
            ##二进制保存图片
            with open(save_path + index + str(name) + ".jpg", "wb") as f:
                f.write(Img.content)
        loadnum += 30


# 同类别多索引
label1 = str(input("输入指定的类型:"))
a1 = list(label1)
labels = ["鲨鱼", "猫猫", "小狗", "人像"]
ls = str(labels)
index = {"鲨鱼": ['虎鲨', '鼠鲨', '鲨鱼', '食人鲨', '鲨', '巨鲨'],
         "猫猫": ['金渐层', '橘猫', '英短', '波斯猫', '狸花猫'],
         "小狗": ['萨摩', '拉布拉多', '柯基', '金毛', '秋田犬'],
         "人像": ['合影', '自拍', '明星', '歌手', '美女', ]
        }
for lz in label1:
    if lz in ls:
        #labels = ["鲨鱼", "猫猫", "小狗", "人像"]
        '''index = {"鲨鱼": ['虎鲨', '鼠鲨', '鲨鱼', '食人鲨', '', '巨鲨'],
                "猫猫": ['金渐层', '橘猫', '英短', '波斯猫', '狸花猫'],
                "小狗": ['萨摩', '拉布拉多', '柯基', '金毛', '秋田犬'],
                "人像": ['合影', '自拍', '明星', '歌手', '美女', '帅哥']
                }'''
        need_num = [1000]  # 需要的图片数量
        print()
    else:
        print("指定的类型不存在")
        sys.exit()
for num in range(1, len(ls)):
    # 需要提前创建label文件夹
    times = need_num[0] // 200 + 1
    save_path = r"C:\Users\God\A\pachong\\" + a1[0] + "\\"
    for i in range(times):
        loadImg(index[labels[num]][i])
  • 写回答

4条回答 默认 最新

  • 法学僧转行程序猿 2022-06-11 10:09
    关注

    1、为什么只能爬到猫猫类的?
    这个跟你输入label1 = str(input("输入指定的类型:"))这句有关,虽然你后边a1 = list(label1)给它定义成列表,但转成列表后就不是你想要的意思,如图:

    img

    也就是说。不论你输入多少东西,当你后来从列表取得时候,第一个和第二个永远是猫(也就是前400张图片永远是猫),修改的方法就是把你这个index字典嵌套列表删了,要什么搜什么,直接放进url里边
    另外,input("输入指定的类型:")本身就是就是字符串类型了,不知道你再给它外边套个str()是要干什么?

    2、为什么全都保存在了猫猫的文件夹里?
    如第一问所讲,因为你每次列表里的第一个都是“猫”,所以a1 = list(label1)→a1[0]这个文件夹永远是猫(看问题1的图)→就导致save_path = r"C:\Users\God\A\pachong\" + a1[0] + "\"一直在猫这个文件夹
    当第一问按照我的思路解决后,第二问自然就不存在了

    3、作为一个经常爬图片视频的老色批,我不建议你从百度爬图片,百度出来的图片质量太差,各大壁纸网站它不香?
    感觉我说的有道理欢迎联系

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月20日
  • 已采纳回答 6月12日
  • 修改了问题 6月10日
  • 修改了问题 6月10日
  • 展开全部

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来