就这??利用爬虫技术可以做到这样有趣

什么是网络爬虫 又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫可以根据指定的规则,从互联网上下载网页、图片、视频等内容,并抽取其中的有用信息进行处理。网络爬虫的工作流程包括获取网页源代码、解析网页内容、存储数据等步骤。根据其目的和工作方式的不同,网络爬虫可以分为多种类型。常见的网络爬虫包括通用爬虫、聚焦爬虫、增量式爬虫等。 阅读详情

想要逼格足够高?在这里插入图片描述

下面分享用 python 代码实现该软件的马赛克拼图效果。

一、安装依赖

  • 安装图像处理库 pillow
pip install pillow

二、使用 Python 做到马赛克拼图效果

1.使用 hsv (颜色空间)完成颜色精准适配

2.自定义图片重复数量

3.增加命令行进度条,增加命令行可自定义参数

4.创建完成拼图数据库后可以直接合成,不用重复执行创建

5.多线程处理图片提高效率

hsv (颜色空间模型)
在这里插入图片描述
hsv 两点间距离公式(欧式距离):

在这里插入图片描述

/main.py

import os
from PIL import Image,ImageOps
import argparse
import time
from multiprocessing import Pool
import random
import math
import sys
from colorsys import rgb_to_hsv

SLICE_SIZE = 85
OUT_SIZE = 5000
IN_DIR = "database/full/"
OUT_DIR = "output/"
REPATE = 0

def get_avg_color(img):
    width, height = img.size
    pixels = img.load()
    if type(pixels) is not int:
        data = []
        for x in range(width):
            for y in range(height):
                cpixel = pixels[x, y]
                data.append(cpixel)
        h = 0
        s = 0
        v = 0
        count = 0
        for x in range(len(data)):
            r = data[x][0]
            g = data[x][1]
            b = data[x][2]
            count += 1
            hsv = rgb_to_hsv(r / 255.0,g / 255.0,b / 255.0)
            h += hsv[0]
            s += hsv[1]
            v += hsv[2]

        hAvg = round(h / count,3)
        sAvg = round(s / count,3)
        vAvg = round(v / count,3)

        if count > 0:

            return (hAvg,sAvg,vAvg)
        else:
            raise IOError("读取图片数据失败")
    else:
        raise IOError("PIL 读取图片数据失败")


def find_closiest(color, list_colors):
    diff = 1000
    cur_closer = False
    arr_len = 0
    for cur_color in list_colors:
        n_diff = math.sqrt(math.pow(math.fabs(color[0]-cur_color[0]), 2) + math.pow(math.fabs(color[1]-cur_color[1]), 2) + math.pow(math.fabs(color[2]-cur_color[2]), 2))
        if n_diff < diff and cur_color[3] <= REPATE:
            diff = n_diff
            cur_closer = cur_color
    if not cur_closer:
        raise ValueError("没有足够的近似图片,建议设置重复")
    cur_closer[3] += 1
    return "({}, {}, {})".format(cur_closer[0],cur_closer[1],cur_closer[2])


def make_puzzle(img, color_list):
    width, height = img.size
    print("Width = {}, Height = {}".format(width,height))
    background = Image.new('RGB', img.size, (255,255,255))
    total_images = math.floor((width * height) / (SLICE_SIZE * SLICE_SIZE))
    now_images = 0
    for y1 in range(0, height, SLICE_SIZE):
        for x1 in range(0, width, SLICE_SIZE):
            try:
                y2 = y1 + SLICE_SIZE
                x2 = x1 + SLICE_SIZE
                new_img = img.crop((x1, y1, x2, y2))
                color = get_avg_color(new_img)
                close_img_name = find_closiest(color, color_list)
                close_img_name = OUT_DIR + str(close_img_name) + '.jpg'
                paste_img = Image.open(close_img_name)
                now_images += 1
                now_done = math.floor((now_images / total_images) * 100)
                r = '\r[{}{}]{}%'.format("#"*now_done," " * (100 - now_done),now_done)
                sys.stdout.write(r)                          
                sys.stdout.flush()    
                background.paste(paste_img, (x1, y1))
            except IOError:
                print('创建马赛克块失败')
    return background


def get_image_paths():
    paths = []
    for file_ in os.listdir(IN_DIR):
        paths.append(IN_DIR + file_)
    if len(paths) > 0:
        print("一共找到了%s" % len(paths) + "张图片")
    else:
        raise IOError("未找到任何图片")

    return paths 

def resize_pic(in_name,size):
    img = Image.open(in_name)
    img = ImageOps.fit(img, (size, size), Image.ANTIALIAS)
    return img

def convert_image(path):
    try:
        img = resize_pic(path,SLICE_SIZE)
        color = get_avg_color(img)
        img.save(str(OUT_DIR) + str(color) + ".jpg")
    except IOError:
        print('图片处理失败')

def convert_all_images():
    paths = get_image_paths()
    print("正在生成马赛克块...")

    pool = Pool()
    pool.map(convert_image, paths)
    pool.close()
    pool.join()   

def read_img_db():
    img_db = []
    for file_ in os.listdir(OUT_DIR):
        if file_ == 'None.jpg':
            pass
        else:     
            file_ = file_.split('.jpg')[0]
            file_ = file_[1:-1].split(',')
            file_ = list(map(float,file_))
            file_.append(0)
            print(file_)
            img_db.append(file_)    
    return img_db

if __name__ == '__main__':

    parse = argparse.ArgumentParser()
    parse.add_argument("-i",'--input',required=True,help='input image')
    parse.add_argument("-d", "--db", type=str, required=True,help="source database")
    parse.add_argument("-o", "--output", type=str, required=True,help="out directory")
    parse.add_argument("-s","--save",type=str,required=False,help="create image but not create database")
    parse.add_argument("-is",'--inputSize',type=str, required=False,help="inputSize")
    parse.add_argument("-os",'--outputSize',type=str, required=False,help="outputSize")
    parse.add_argument("-r",'--repate',type=int, required=False,help="repate number")
    args = parse.parse_args()
    start_time = time.time()
    args = parse.parse_args()
    image = args.input

    if args.db:
        IN_DIR = args.db
    if args.output:
        OUT_DIR= args.output
    if args.inputSize:
        SLICE_SIZE = args.inputSize
    if args.outputSize:
        OUT_SIZE = args.outputSize
    if not args.save:
        convert_all_images()
    if args.repate:
        REPATE = args.repate

    img = resize_pic(image,OUT_SIZE)
    list_of_imgs = read_img_db()
    out = make_puzzle(img, list_of_imgs)
    img = Image.blend(out, img, 0.5)
    img.save('out.jpg') 
    print("耗时: %s" % (time.time() - start_time))
    print("已完成")

命令行

  • -s – save 已经存在output文件夹已经有马赛克图片,快速生成图片
  • -i – input 原始图片路径
  • -d – database 爬虫图片数据集
  • -o – output 马赛克图标生成路径
  • -is -os 输入(马赛克块)/ 输出(生成图) 图片尺寸
  • -r --repate(int) 重复(建议在图片集少的时候设置
python puzzle.py -i test.jpg -d database/full/ -o output/ 

效果图:在这里插入图片描述

数据爬虫帮你搞定了,还不赶紧趁热来一发数据挖掘或者机器学习?

Python爬虫技术与应用:网络爬虫概述 网络爬虫的不同抓取策略,便是利用不同的方法确定待抓取URL队列中URL的优先顺序。网络爬虫的抓取策略有很多种,但不管方法如何,其根本目标一致。网页的重要性评判标准不同,大部分采用网页的流行性进行定义。网页结构分布图如图1-5所示。 阅读详情

相关推荐

认识网络爬虫(一看秒知)

指访问全互联网资源的网络爬虫。的网页,这样可以有效地减少网页的下载量,减少访问时间和存储空间的耗费,但是增加了。情热点,跟踪目标话题,并根据一定的标准采取相应的舆情控制与引导措施。放到自己的平台上展示,并提供横向数据的比较,帮助用户寻找实惠的商品价格。运用网络爬虫技术,不断地访问交通出行的官方售票网站刷新余票,一旦发现有新的余票便。力的数据支持,还能为中小型网站的推广引流提供有效的渠道,给我们的生活带来了极大的。即便如此,网络爬虫的抓取行为仍会给网站增加不小的压力,严重时甚至可能影响对网。

weixin_49816293的博客 2727

网络爬虫技术

本文介绍了网络爬虫的基础概念与应用。主要内容包括:1)爬虫定义与分类,分为通用、聚焦、增量式和深层网络爬虫四种类型;2)核心工作原理,涉及HTTP请求过程、响应结构和网页基础;3)常见爬取策略如宽度优先(BFS)和深度优先(DFS)遍历;4)Python中Requests库的使用方法,包括请求发送、响应处理和异常捕获。文章通过百度网页爬取实例,展示了网络爬虫从发送请求到获取响应的完整流程,为初学者提供了网络数据采集的基础知识框架。

2302_78993464的博客 2959

浅谈网络爬虫技术(爬虫技术分类)

除此之外,搜索引擎更关注的是大而全,为大多数用户提供检索服务,所以有些冷门的没有被列入索引的网站就没办法被实时获取到,而网络爬虫则可以通过个人定制,爬取一些搜索引擎关照不到的地方,典型的案例便是深层网络爬虫以及在robots.txt中明确禁止搜索引擎爬取的网站,而理论上开发者编写的网络爬虫可以到达世界上的任何网站。网站要防止的是来自个人或组织的不加节制的爬虫行为,通过不断提高爬虫门槛,建立反爬虫措施,可以很大程度增加网络爬虫的爬取成本,降低网络爬虫带来的危害。

Jernnifer_mao的博客 1009

网络爬虫是什么

作为一家大数据公司的运营小编,经常会有人问我“诶?你说的爬虫是什么呀”“爬虫的用途是什么呀?”“你们公司是卖爬虫的吗,有蜥蜴吗?”等一系列问题,面对这些问题,小编是绝望的。那么爬虫到底是什么呢? 一、爬虫是什么 以下是百度百科上对于网络爬虫的定义: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或

u011231755的博客 5万+

浅谈电商网络爬虫技术

除此之外,搜索引擎更关注的是大而全,为大多数用户提供检索服务,所以有些冷门的没有被列入索引的网站就没办法被实时获取到,而网络爬虫则可以通过个人定制,爬取一些搜索引擎关照不到的地方,典型的案例便是深层网络爬虫以及在robots.txt中明确禁止搜索引擎爬取的网站,而理论上开发者编写的网络爬虫可以到达世界上的任何网站。如图1所示,完整的爬虫流程应当是编写的网络爬虫在发起请求之后,目标服务器返回指定的请求响应,通过对请求响应返回的响应体进行解析,找到需要的信息进行数据存储。

Jernnifer_mao的博客 1906

什么是网络爬虫?有什么用?怎么爬?

随着大数据时代的来临,网络爬虫在互联网中的地位将越来越重要。互联网中的数据是海量的,如何自动高效地获取互联网中我们感兴趣的信息并为我们所用是一个重要的问题,而爬虫技术就是为了解决这些问题而生的。如果只是做搜索引擎,那么感兴趣的信息就是互联网中尽可能多的高质量网页;如果要获取某一垂直领域的数据或者有明确的检索需求,那么感兴趣的信息就是根据我们的检索和需求所定位的这些信息,此时,需要过滤掉一些无用信息。前者我们称为通用网络爬虫,后者我们称为聚焦网络爬虫。

m0_72282564的博客 1980

终于有人把网络爬虫讲明白了

摘要:Python网络爬虫的详尽解释。导读:网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理。在大数据时代,信息的采集是一项重要的工作,如果...

苏克的博客 4348

基于网络爬虫的XSS漏洞检测技术

1.   背景和意义 在早期的网站设计中,网页的存在形式都是静态的。静态的网页内容稳定,不会经常更新,但是在后期却不易维护。如果需要维护更新网页,则必须重新编辑HTML网页,因此当网站很庞大的时候,维护静态网页的工作量几乎是不能容忍的。随着时代的发展,在这方面发展出来一大批的动态网站技术,比如JSP,ASP,PHP等。这些网站技术的动态性主要体现在其相应网页的形成过程是动态的,即网页内容会根据用

木精灵的技术博客 7026

浅谈网络爬虫

浅谈网络爬虫 什么是网络爬虫? 爬虫能干什么 搜索引擎 抢票、刷票等自动化软件 部分破解软件 金融等行业数据挖掘、分析数据来源 其他 爬虫很简单 语言的选择 两种语言的小demo 爬虫也不简单 ip、浏览器头(User-Agent)、和cookie限制 需登录的验证码限制、参数限制 JavaScript渲染/ajax加密 爬虫知识储备路线 1.基础语法: 2.正则和爬虫相关库,以及浏览器F12...

bigsai 1万+

网络爬虫的基本结构是什么?如何建立网络爬虫抓取数据?

摘要:互联网上有很多丰富的信息可以被抓取并转换成有价值的数据集,然后用于不同的行业。比如企业用户利用电商平台数据进行商业分析,学校的师生利用网络数据进行科研分析等等。那么,除了一些公司提供的一些官方公开数据集之外,我们应该在哪里获取数据呢? 作为数据分析的核心,网路爬虫从作为一个新兴技术到目前应用于众多行业,已经走了很长的道路。互联网上有很多丰富的信息可以被抓取并转换成有价值的数据集,然后...

网页爬虫与数据采集 · 八爪鱼 2732

深入瑞芯微ISP生态:手把手配置RK3588上的RKAIQ Server并与Windows端RKISP Tuner联调

本文详细介绍了如何在RK3588平台上配置RKAIQ Server并与Windows端的RKISP Tuner进行联调,以实现高效的ISP调优。从环境准备、服务部署到实战调试,涵盖了IMX415相机适配等关键步骤,帮助开发者快速掌握瑞芯微ISP生态的核心技术。

weixin_32447969的博客 670

什么是网络爬虫?有什么用?怎么爬?终于有人讲明白了

【导读】网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理。在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高。 此时,我们可以使用网络爬虫对数据信息进行自动采集,比如应用于搜索引擎中对站点进行爬取收录,应用于数据分析与挖掘中对数据进行采集,应用于金融分析中对金融数据进行采集,除此之外,还可以将网络爬虫应用于舆情监测...

python学习者的博客 3万+

UE5网络模块实战:属性复制、RPC与联机开发踩坑指南

多人联机开发中,网络同步是核心难题。UE5网络模块以服务器权威为基础,通过Actor复制、RPC和所有权机制实现多端状态一致。理解属性复制与OnRep回调、区分Server/Client/Multicast RPC的适用场景,是构建稳定联机架构的关键。本文结合数字孪生与多端协作场景,探讨如何将渲染与逻辑分离,并针对打包后网络失效、端口防火墙、崩溃排查等工程实践问题给出解决方案。通过蓝图接口解耦表现层,利用C++创建StaticMesh组件实现服务器逻辑与客户端表现分离,同时注意专用服务器不加载渲染依赖(如D

weixin_29010003的博客 273

Python网络爬虫技术

Python网络爬虫作为一种强大的数据获取工具,在数据分析、信息检索、搜索引擎优化等领域发挥着重要作用。然而,在使用爬虫时,我们必须遵守相关法律法规和网站的访问政策,确保数据的合法性和隐私保护。同时,随着技术的不断发展,我们也应积极探索和创新爬虫技术的新应用和新方法。

jun778895的博客 3954

有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(中)

有限时间滑模控制(FTSMC)和固定时间滑模控制(FixTSMC)是两种重要的控制策略,旨在实现系统状态的快速收敛。FTSMC通过设计滑模面和控制律,确保系统状态在有限时间内收敛到原点,但其收敛时间与初始状态相关。FixTSMC则进一步优化,使收敛时间与初始状态无关,适用于高动态环境,具有更强的鲁棒性和更平滑的控制信号。两种方法均通过李雅普诺夫函数证明其稳定性,并通过仿真验证其有效性。FixTSMC在工程应用中更为可靠,尤其适合安全关键系统。

Lyajpunov的博客 3225

2022北京高考数学压轴题21题:Python暴力枚举验证k≥7的5种反例

本文探讨了2022北京高考数学压轴题21题的编程解法,通过Python暴力枚举验证k≥7的5种反例。文章详细介绍了m-连续可表数列的定义、问题转化与约束条件,并提供了暴力枚举算法设计和优化技巧,帮助读者理解如何用编程思维解决数学问题。

weixin_33552698的博客 234

网络爬虫技术概述

1、爬虫概述 1.1、什么是爬虫 网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 通俗的讲,就是一种能够自动获取网页内容并可以按照指定规则提取相应内容的程序。 1.2、爬虫原理 那么网络爬虫是从哪抓取,又是按照怎么样的规则呢? 首先,我们需要了解URL。URL在日常网络中无处不在,www.baidu.com, www.taobao.com,简单来说,网络地址就是URL。网络爬虫就是从URL进行爬取。即爬虫的内容就是具体地址下的内容,如淘宝下的销售信息。 那么,是如何通过URL进行爬取

paccpjsystematic的博客 8090

如何在 Ubuntu 24.04 LTS 上安装 SSH 服务器?

Ubuntu是一个基于Debian的开源Linux操作系统,由Canonical Ltd.开发和维护。Ubuntu致力于提供用户友好、稳定且安全的操作系统环境,适用于个人用户、企业和服务器等不同场景。Ubuntu 24.04 LTS是Ubuntu发布的一个长期支持版本,LTS代表长期支持(Long Term Support)。这意味着Ubuntu 24.04 LTS将获得长达5年的安全更新和维护支持,使其成为企业和个人用户的理想选择。

网络技术联盟站 5888

【Python 网络爬虫技术】

1.1 爬虫的定义与工作原理网络爬虫,也被称为网络蜘蛛或网络机器人,是一种按照特定规则,自动抓取互联网信息的程序或脚本。其工作原理基于 HTTP 协议,大致流程为:首先,爬虫向目标网站发送 HTTP 请求,请求中包含了目标网页的 URL 地址;接着,网站服务器接收到请求后,将网页内容以 HTML、XML 或 JSON 等格式返回给爬虫;最后,爬虫对获取到的响应内容进行解析,提取出所需的数据,并进行存储或进一步处理。

2401_84473582的博客 2684

看完这篇你就能讲解LLC软开关:一文秒懂 ZVS 和 ZCS 到底啥意思!

想要 MOS 管ZVS 好实现➜ 把工作频率保持在 fr1 或更高。想让整流二极管也ZCS 实现➜ 频率就别高过 fr1。设计磁性元件时,一定要计算好 Lr、Lm、Cr 的值,这直接决定你 fr、fr1 是多少!LLC 的软开关技术不是“魔法”,是电感电容+频率控制的精妙组合;fr1 就像黄金分割点,整流和开关都能“刚刚好”;不是所有软开关都能同时实现,要看你在频率曲线的哪一段!

weixin_43199439的博客 1546

PINN:当深度学习遇上朗伯-比尔定律

光谱数据处理中引入PINN的三种架构设计

qq_53529450的博客 155

网络爬虫详解

网络爬虫(web crawler,又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 产生背景 随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南

顺其自然~专栏 9168

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

利用Python网络爬虫下载一本小说

本文详细介绍了如何使用Python网络爬虫下载一本小说,从准备工作到案例实现,再到注意事项与优化,旨在帮助新手朋友理解和掌握网络爬虫的基本技术和应用。通过本文的学习和实践,相信读者已经对网络爬虫有了更深入的了解,并能够根据自己的需求进行扩展和优化。​

Everly_的博客 2642

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: Python代码原来还可以这样玩——画出不同人物效果图,感觉很美好
下一篇: 用 Python 读写 Excel 表格,就是这么的简单粗暴且乏味
克金森沐沐
博客等级 码龄6年 694粉丝 64原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值