当前位置: 首页 > article >正文

360图片搜索爬虫|批量爬取搜索图片

 360图片搜索功能爬虫,根据搜索内容批量获取图片,很简单就能实现

 结尾附实现代码

 一、抓包与分析

直接在360搜索处点击回车即可抓到

GET请求包  https://image.so.com/i?q=天空&inact=0

q——搜索框输入的内容

搜索包响应结果 1

搜索包响应结果展示 2 

在响应中,这一部分的的数据便是图片的下载地址和分辨率

可以看到搜索结果的相关数据

title——unicode编码后的标题

img——图片链接

width、hight——分辨率

二、实现代码 

代码运行效果1

代码运行效果2

import requests
import json
import os
from bs4 import BeautifulSoup


def fetch_image_urls(url, headers):
    response = requests.get(url, headers=headers)
    if response.status_code != 200:
        print(f"请求失败,状态码:{response.status_code}")
        return []

    soup = BeautifulSoup(response.text, "html.parser")
    script_tag = soup.find("script", {"type": "text/data", "id": "commercialImages"})

    if not script_tag:
        print("未找到标签")
        return []

    try:
        image_data = json.loads(script_tag.string)
        return [img["qhimg_url"] for img in image_data]
    except json.JSONDecodeError:
        print("解析JSON数据失败")
        return []


def download_images(image_urls, headers, folder="data"):
    if not os.path.exists(folder):
        os.makedirs(folder)

    for i, url in enumerate(image_urls):
        try:
            img_response = requests.get(url, headers=headers)
            if img_response.status_code == 200:
                with open(f"{folder}/image_{i}.jpg", "wb") as f:
                    f.write(img_response.content)
                print(f"下载成功: image_{i}.jpg")
            else:
                print(f"下载失败: {url}")
        except Exception as e:
            print(f"下载错误: {e}")


if __name__ == "__main__":
    url = "https://image.so.com/i?q=海洋&inact=0"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
    }
    image_urls = fetch_image_urls(url, headers)
    if image_urls:
        print("图片下载链接:")
        for url in image_urls:
            print(url)
        download_images(image_urls, headers)


http://www.kler.cn/a/572897.html

相关文章:

  • 关于在vue3中的动态组件component标签上给ref属性动态赋值的问题
  • Java进阶-SpringCloud设计模式-工厂模式的设计与详解
  • 原型链与继承
  • 【RAG 篇】万字长文:向量数据库选型指南 —— Milvus 与 FAISS/Pinecone/Weaviate 等工具深度对比
  • 软考架构师笔记-进程管理
  • 自动驾驶---不依赖地图的大模型轨迹预测
  • AI与.NET技术实操系列
  • Python:函数的各类参数以及函数嵌套
  • Mono里运行C#脚本44—System.Console.WriteLine()函数的生成过程
  • L2-001 紧急救援
  • CS144 Lab Checkpoint 0: networking warm up
  • java数据结构_Map和Set_HashMap 底层源码解读_9.5
  • python量化交易——金融数据管理最佳实践——使用qteasy大批量自动拉取金融数据
  • 前端练习项目:html css js 开发AI数字人平台官网前端静态页面
  • 【AIGC】通义万相 2.1 与蓝耘智算:共绘 AIGC 未来绚丽蓝图
  • 设备管理系统功能与.NET+VUE(IVIEW)技术实现
  • 神经网络之CNN文本识别
  • 在 Docker 中,无法直接将外部多个端口映射到容器内部的同一个端口
  • MyBatis-Plus 条件构造器的使用(左匹配查询)
  • Windows零门槛部署DeepSeek大模型:Ollama+7B参数模型本地推理全攻略