在这篇文章中,我们将介绍Python提供的几乎所有的网络数据采集工具,你可以将本文看作是我们的《终极网络数据采集指南》的系列文章。我们将从最基本的工具到最先进的工具进行介绍,并将涵盖每一个的利弊。当然,我们并不能涵盖我们讨论的每个工具的所有方面,但是这篇文章应该足以让你了解哪些工具可以做什么,以及何时使用哪些工具。
Python资源共享群:626017123
注意:当我在这篇博客文章中谈论Python时,你应该假设我谈论的是Python3。
0)网络基础知识
互联网是非常复杂的: 在浏览器中查看一个简单的网页涉及到许多底层技术和概念。我并不打算解释所有的东西,但是为了从网络中提取数据,我将向你展示一些你必须理解的最重要的东西。
超文本传输协议(HTTP)
HTTP使用一个客户机/服务器模型,其中一个HTTP客户机(浏览器、你的Python程序、curl和Requests等)打开一个连接并向一个HTTP服务器(Nginx和Apache等)发送一条消息(“我想看那个页面:/product”)。
然后,该服务器使用一个响应(例如HTML代码)进行回答并关闭连接。HTTP被称为无状态协议,因为每个事务(请求/响应)都是独立的。例如,FTP是有状态协议。
基本上,当你在浏览器中输入一个网址时,HTTP请求看起来是这样的:
在这个请求的第一行,你可以看到很多东西:
以下是最重要的标头字段:
Host: 服务器的域名,如果没有指定端口号,则默认为80。
User-Agent: 包含客户端发起的请求的信息,包括操作系统信息。在本例中,它是我的OSX系统上的网络浏览器(Chrome)。这个标头很重要,因为它要被用于统计(有多少用户访问了我的手机网站或桌面网站)或用于防止任何来自机器人的违规行为。因为这些标头是由客户端发送的,所以可以对它进行修改(称为“标头欺骗”),这正是我们使用scraper所要做的——使scraper看起来像一个普通的网络浏览器。
Accept: 可接受的作为响应的内容类型。有很多不同的内容类型和子类型:text/plain、text/html、image/jpeg和application/json等。
Cookie : name1=value1;name2=value2... ,此标头字段包含一个名称-值对列表。它被称为会话cookies,用于存储数据。Cookies是网站用来验证用户身份, 和/或在你的浏览器中存储数据的工具。例如,当你填写了一个登录表单时,服务器将检查你输入的凭据是否正确,如果正确,它将进行重定向并将一个会话cookie注入你的浏览器。然后,你的浏览器会将此cookie与随后的每个请求一起发送到该服务器。
Referrer: Referrer标头包含跳转到实际URL页面的源URL地址。这个标头很重要,因为网站使用这个标头来根据用户来源来改变自身的行为。例如,许多新闻网站都有付费订阅,你只能浏览文章的10%,但如果用户来自像Reddit这样的新闻聚合器,网站就会让你浏览全部内容。它们使用referrer来检查这个。有时,我们将不得不欺骗这个标头来获得我们想要提取的内容。
标头列表中还有很多字段,你可以在这里找到完整的标头列表:https://en.wikipedia.org/wiki/List_of_HTTP_header_fields。
服务器会像这样进行响应:
在第一行,我们有一个新的信息,HTTP代码 200 OK。这意味着此请求已经成功。对于请求标头来说,有很多HTTP代码,分为四个常见类:2XX表示请求成功、3XX表示重定向、4XX表示请求异常(最出名的是404 Not found)和5XX表示服务器错误。
然后,如果你使用网络浏览器发送此HTTP请求,浏览器将解析HTML代码,获取所有最终前端资源(Javascript文件、CSS文件、图像等),并将结果呈现到主窗口。
在接下来的部分中,我们将看一些使用Python执行HTTP请求,并从响应中提取我们想要的数据的不同方法。
1)手动打开一个socket(套接字)并发送HTTP请求
Socket
在Python中执行HTTP请求的最基本方法是打开一个socket并手动发送HTTP请求。
现在我们有了HTTP响应,从它里面提取数据的最基本方法是使用正则表达式。
正则表达式
正则表达式(RE或Regex)是字符串的搜索模式。使用regex,你可以在一个更大的文本体中搜索特定的字符/单词。
例如,你可以识别网络页面中的所有电话号码。你还可以替换某些项,例如,你可以将HTML中格式糟糕的所有大写标记替换为小写标记。你还可以校验一些输入…
正则表达式使用的模式是从左到右应用的。每个源字符只使用一次。你可能想知道为什么在进行网络数据挖掘时了解正则表达式很重要?
总之,有各种不同的Python模块可以来解析HTML,你可以使用XPath和CSS选择器。
在一个理想的语义世界中,数据是易于机器读取,信息被嵌入到相关的HTML元素中,并带有有意义的属性。
但是现实世界是混乱的,你经常会在一个p元素中发现大量的文本。当你想在这个巨大的文本中提取一个特定的数据时,例如价格、日期或名称等,你必须使用正则表达式。
注意:这里有一个很棒的网站来测试你的正则表达式: https://regex101.com/ ,和一个很棒的博客(https://www.rexegg.com/ )来了解更多关于它们的信息,这篇文章将只涵盖你可以使用regexp做的事情的一小部分。
当你有这类数据时,正则表达式可以很有用:
我们可以使用一个Xpath表达式来选择这个文本节点,然后使用这种正则表达式来提取价格:
要提取一个HTML标记内的文本,使用正则表达式很烦人,但却是可行的:
正如你所看到的,你可以使用一个socket手动发送HTTP请求,并使用正则表达式解析响应,但是这很复杂,而且有更高级的API可以使这项任务更容易。
2) urllib3 和 LXML
免责声明: 在Python的urllib中很容易迷失方向。urllib和urllib2是标准库的一部分,你还可以找到urllib3。urllib2在python3中被分成多个模块,而且urllib3可能随时就不会成为标准库的一部分。这整个令人困惑的东西将成为一篇博客文章的主题。在本部分中,我选择只讨论urllib3,因为它在Python世界中被广泛使用,只举两个例子,比如被pip和requests库使用。
Urllib3是一个高级包,它允许你对一个HTTP请求做几乎任何你想做的事情。它允许我们用更少的代码行来做上面用socket所做的事情。
这比socket版本更简洁。不仅如此,该API非常简单易懂,你可以轻松地做许多事情,比如添加HTTP标头、使用代理、POST表单等。
例如,如果我们决定设置一些标头并使用一个代理,我们只需要这样做。
看到了吗?完全相同的代码行数,但是,有一些事情urllib3处理起来并不容易,例如,如果我们想添加一个cookie,我们必须手动创建相应的标头并将其添加到请求中。
还有一些事情urllib3可以做,但requests做不了。有的事情是requests不能做的,例如池和代理池的创建和管理、重试策略的控制。
简单地说,urllib3在抽象方面介于requests和socket之间,尽管它比socket更接近requests。
这一次,为了解析响应,我们将使用lxml包和XPath表达式。
XPath
Xpath是一种使用路径表达式来选择XML文档(或HTML文档)中的节点或节点集的技术。与文档对象模型一样,Xpath自1999年以来一直是一个W3C标准。即使Xpath本身不是一种编程语言,但它也允许你编写可以直接访问一个特定节点或特定节点集的表达式,而无需遍历整个HTML树(或XML树)。
你可以将XPath看作regexp,但主要是针对XML/HMTL。
要用XPath从一个HTML文档中提取数据,我们需要三个东西:
一个HTML 文档
一些XPath 表达式
一个可以运行这些表达式的XPath 引擎
首先,我们将使用由于urllib3所得到的HTML,我们只想从谷歌主页中提取所有链接,因此我们将使用一个简单的XPath表达式://a,并使用LXML来运行它。LXML是一个支持XPATH的快速且易于使用的XML和HTML处理库。
安装:
下面是前一段代码之后的代码:
输出应该是这样的:
你必须记住,这个示例非常非常简单,并没有真正向你展示XPath可以有多么强大(注意:这个XPath表达式应该改为 //a/@href,以避免必须对links进行迭代才能获得它们的href)。
如果你想了解更多关于XPath的知识,你可以阅读这篇很好的介绍(https://librarycarpentry.org/lc-webscraping/02-xpath/index.html )。LXML文档也编写得很好,是一个很好的起点(https://lxml.de/tutorial.html )。
XPath表达式(像regexp一样)非常强大,是从HTML中提取信息的最快方法之一,而且与regexp一样,XPath很快就会变得混乱、难于阅读和维护。
3) requests 和 BeautifulSoup
Requests是python包中的王者,拥有超过1100万的下载量,是Python中使用最广泛的包。
安装:
使用Requests包发出一个请求(没有评论)真的很简单:
使用Requests可以很容易地执行POST请求,处理cookie,查询参数…
Hacker News认证
假设我们想要创建一个工具来自动向Hacker news或任何其他论坛(比如Buffer)提交我们的博客文章。在发布我们的链接之前,我们需要对这些网站进行认证。这就是我们要使用Requests 和 BeautifulSoup所做的事情!
下面是Hacker News的登录表单和相关的DOM:
这个表单上有三个 标记,第一个标记有一个隐藏类型和一个“goto”名称,另外两个标记是用户名和密码。
如果你在你的Chrome浏览器中提交此表单,你会看到有很多事情正在发生:一个重定向和一个cookie正在被设置。这个cookie将由Chrome在随后的每个请求中进行发送,以便服务器知道你是经过身份验证的。
使用Requests做这些很容易,它将自动为我们处理重定向,并且可以使用Session对象处理cookies。
接下来我们需要的是BeautifulSoup,它是一个Python库,可以帮助我们解析服务器返回的HTML,以确定我们是否登录了。
安装:
因此,我们所要做的就是将这三个输入连同我们的凭证一起POST到/login端点,并检查是否存在一个只在登录后才显示的元素:
为了了解更多关于BeautifulSoup的信息,我们可以尝试提取主页上的每个链接。
顺便说一下,Hacker News提供了一个功能强大的API,所以我们以它为例,但是你应该使用这个API而不是进行抓取!
我们需要做的第一件事是检查Hacker New的主页,以了解我们将必须选择的结构和不同的CSS类:
我们可以看到所有的文章都在一个
中,所以我们需要做的第一件事就是选择所有这些标记。这使用以下代码可以很容易做到:
然后对于每个链接,我们将提取它的id, title, url和rank:
正如你所看到的,Requests和BeautifulSoup是通过发布表单来提取数据和自动化不同内容的优秀库。如果你想做大规模的网络数据挖据项目,你仍然可以使用Requests,但是你需要自己处理很多事情。
当你需要抓取很多网页时,有很多事情你必须处理:
找到一种并行化代码的方法使其更快
处理错误
存储结果
过滤结果
终止你的请求避免服务器过载
幸运的是,有一些工具可以为我们处理这些事情。
4) Scrapy
Scrapy是一个功能强大的Python 数据挖掘框架。它提供了许多功能来异步下载网络页面、处理和保存它。它能处理多线程、爬行(从一个链接到另一个链接以找到网站中的每个URL的过程)、站点地图爬行等等。
Scrapy还有一种交互模式,称为Scrapy Shell。使用Scrapy Shell,你可以非常快速地测试你的抓取代码,比如XPath表达式或CSS选择器。
Scrapy的缺点是它的学习曲线陡峭,需要学习的东西很多。
为了继续我们关于Hacker news的示例,我们将编写一个Scrapy Spider,它将抓取前15页的结果,并将所有内容保存在一个CSV文件中。
你可以使用pip轻松安装Scrapy:
然后你可以使用scrapy 命令行为我们的项目生成样板代码:
在hacker_news_scraper/spider中,我们将使用我们的爬虫的代码创建一个新的python文件:
在Scrapy中有很多约定,这里我们定义了一个起始url数组。我们将通过Scrapy命令行使用属性名来调用我们的Spider。
我们将在start_urls数组中的每个URL上调用解析方法:
然后,我们需要稍微调整一下Scrapy,以便我们的爬虫在目标网站上表现良好。
你应该始终打开这个选项,它将通过分析响应时间和调整并发线程的数量来确保目标网站不会被你的爬虫拖慢。
你可以使用Scrapy CLI并以不同的输出格式(CSV, JSON, XML…)来运行这段代码:
就是它!现在,你的所有链接都保存在一个格式良好的JSON文件中。
5) Selenium 和 Chrome—无UI模式
对于大规模的网络抓取任务来说,Scrapy确实很好,但是如果你需要抓取用Javascript框架编写的单页面应用程序,那么它就没那么好了,因为它无法呈现Javascript代码。
抓取这些SPA可能很有挑战性,因为它们通常涉及许多AJAX调用和websockets连接。如果性能是一个问题,你应该总是会尝试重新生成Javascript代码,这意味着你要使用浏览器检查器手动检查所有网络调用,并复制包含有趣数据的AJAX调用。
在某些情况下,要获得所需的数据涉及到太多的异步HTTP调用,而在无UI浏览器中呈现页面可能更容易一些。
另一个很好的用例是对一个页面进行截屏,这就是我们要对Hacker News主页做的(再次!)
你可以使用pip安装selenium包:
你还需要Chromedriver:
然后我们只需从selenium包中导入Webdriver,用headless=True配置Chrome,并设置窗口大小(不然截图会非常小):
你应该会得到一个很好的主页截图:
你可以使用Selenium API和Chrome做更多的事情,比如:
执行 Javascript
填写表单
在元素上进行点击
使用CSS选择器/ XPath表达式提取元素
Selenium和无UI模式下的Chrome是抓取你想要的任何信息的终极组合。你可以自动化任何你使用普通的Chrome浏览器所做的事情。
最大的缺点是Chrome需要大量的内存/ CPU性能。通过一些微调,你可以将每个Chrome实例的内存占用减少到300-400mb,但每个实例仍然需要一个CPU核心。
如果你想同时运行几个Chrome实例,你需要强大的服务器(成本会迅速上升)和持续的资源监控。
结论
下面是我们在本文中讨论的每种技术的一个快速回顾表。如果你知道一些与本文相关的资源,请在评论中告诉我们。
我希望本文的概述能够帮助你有效地选择Python数据挖掘工具,并希望你在阅读本文时能够学到一些东西。
我在这篇文章中讨论的所有内容都是我用来构建ScrapingNinja的东西,也就是这里提到的最简单的网络数据挖掘API。如果你不想浪费太多的时间设置一切的话,就赶紧去测试我们的解决方案吧,第一个1k 次API调用是免费的!
我在这篇文章中提到的每一个工具都将是我未来的一个特定博文的主题,我将在其中进行详细讨论。
不要犹豫,请及时在评论中告诉我你想知道关于数据挖掘的什么知识,我将在下一篇文章中讨论它。
你可能感兴趣的:(Python,Python)
python 读excel每行替换_Python脚本操作Excel实现批量替换功能
weixin_39646695
python 读excel每行替换
Python脚本操作Excel实现批量替换功能大家好,给大家分享下如何使用Python脚本操作Excel实现批量替换。使用的工具Openpyxl,一个处理excel的python库,处理excel,其实针对的就是WorkBook,Sheet,Cell这三个最根本的元素~明确需求原始excel如下我们的目标是把下面excel工作表的sheet1表页A列的内容“替换我吧”批量替换为B列的“我用来替换的
python笔记14介绍几个魔法方法
抢公主的大魔王
python python
python笔记14介绍几个魔法方法先声明一下各位大佬,这是我的笔记。如有错误,恳请指正。另外,感谢您的观看,谢谢啦!(1).__doc__输出对应的函数,类的说明文档print(print.__doc__)print(value,...,sep='',end='\n',file=sys.stdout,flush=False)Printsthevaluestoastream,ortosys.std
Anaconda 和 Miniconda:功能详解与选择建议
古月฿
python入门 python conda
Anaconda和Miniconda详细介绍一、Anaconda的详细介绍1.什么是Anaconda?Anaconda是一个开源的包管理和环境管理工具,在数据科学、机器学习以及科学计算领域发挥着关键作用。它以Python和R语言为基础,为用户精心准备了大量预装库和工具,极大地缩短了搭建数据科学环境的时间。对于那些想要快速开展数据分析、模型训练等工作的人员来说,Anaconda就像是一个一站式的“数
环境搭建 | Python + Anaconda / Miniconda + PyCharm 的安装、配置与使用
本文将分别介绍Python、Anaconda/Miniconda、PyCharm的安装、配置与使用,详细介绍Python环境搭建的全过程,涵盖Python、Pip、PythonLauncher、Anaconda、Miniconda、Pycharm等内容,以官方文档为参照,使用经验为补充,内容全面而详实。由于图片太多,就先贴一个无图简化版吧,详情请查看Python+Anaconda/Minicond
你竟然还在用克隆删除?Conda最新版rename命令全攻略!
曦紫沐
Python基础知识 conda 虚拟环境管理
文章摘要Conda虚拟环境管理终于迎来革命性升级!本文揭秘Conda4.9+版本新增的rename黑科技,彻底告别传统“克隆+删除”的繁琐操作。从命令解析到实战案例,手把手教你如何安全高效地重命名Python虚拟环境,附带版本检测、环境迁移、故障排查等进阶技巧,助你提升开发效率10倍!一、颠覆认知:Conda居然自带重命名功能?很多开发者仍停留在“Conda无法直接重命名环境”的认知阶段,实际上自
centos7安装配置 Anaconda3
Anaconda是一个用于科学计算的Python发行版,Anaconda于Python,相当于centos于linux。下载[root@testsrc]#mwgethttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.shBegintodownload:Anaconda3-5.2.0-L
Pandas:数据科学的超级瑞士军刀
科技林总
DeepSeek学AI 人工智能
**——从零基础到高效分析的进化指南**###**一、Pandas诞生:数据革命的救世主****2010年前的数据分析噩梦**:```python#传统Python处理表格数据data=[]forrowincsv_file:ifrow[3]>100androw[2]=="China":data.append(float(row[5])#代码冗长易错!```**核心痛点**:-Excel处理百万行崩
【Jupyter】个人开发常见命令
TIM老师
# Pycharm & VSCode python Jupyter
1.查看python版本importsysprint(sys.version)2.ipynb/py文件转换jupyternbconvert--topythonmy_file.ipynbipynb转换为mdjupyternbconvert--tomdmy_file.ipynbipynb转为htmljupyternbconvert--tohtmlmy_file.ipynbipython转换为pdfju
用 Python 开发小游戏:零基础也能做出《贪吃蛇》
本文专为零基础学习者打造,详细介绍如何用Python开发经典小游戏《贪吃蛇》。无需复杂编程知识,从环境搭建到代码编写、功能实现,逐步讲解核心逻辑与操作。涵盖Pygame库的基础运用、游戏界面设计、蛇的移动与食物生成规则等,让新手能按步骤完成开发,同时融入SEO优化要点,帮助读者轻松入门Python游戏开发,体验从0到1做出游戏的乐趣。一、为什么选择用Python开发《贪吃蛇》对于零基础学习者来说,
基于Python的AI健康助手:开发与部署全攻略
AI算力网络与通信
AI算力网络与通信原理 AI人工智能大数据架构 python 人工智能 开发语言 ai
基于Python的AI健康助手:开发与部署全攻略关键词:Python、AI健康助手、机器学习、自然语言处理、Flask、部署、健康管理摘要:本文将详细介绍如何使用Python开发一个AI健康助手,从需求分析、技术选型到核心功能实现,再到最终部署上线的完整过程。我们将使用自然语言处理技术理解用户健康咨询,通过机器学习模型提供个性化建议,并展示如何用Flask框架构建Web应用接口。文章包含大量实际代
AI人工智能中的数据挖掘:提升智能决策能力
AI人工智能中的数据挖掘:提升智能决策能力关键词:数据挖掘、人工智能、机器学习、智能决策、数据分析、特征工程、模型优化摘要:本文深入探讨了数据挖掘在人工智能领域中的核心作用,重点分析了如何通过数据挖掘技术提升智能决策能力。文章从基础概念出发,详细介绍了数据挖掘的关键算法、数学模型和实际应用场景,并通过Python代码示例展示了数据挖掘的全流程。最后,文章展望了数据挖掘技术的未来发展趋势和面临的挑战
lesson20:Python函数的标注
你的电影很有趣
python 开发语言
目录引言:为什么函数标注是现代Python开发的必备技能一、函数标注的基础语法1.1参数与返回值标注1.2支持的标注类型1.3Python3.9+的重大改进:标准集合泛型二、高级标注技巧与最佳实践2.1复杂参数结构标注2.2函数类型与回调标注2.3变量注解与类型别名三、静态类型检查工具应用3.1mypy:最流行的类型检查器3.2Pyright与IDE集成3.3运行时类型验证四、函数标注的工程价值与
Jupyter Notebook:数据科学的“瑞士军刀”
a小胡哦
机器学习基础 人工智能 机器学习
在数据科学的世界里,JupyterNotebook是一个不可或缺的工具,它就像是数据科学家手中的“瑞士军刀”,功能强大且灵活多变。今天,就让我们一起深入了解这个神奇的工具。一、JupyterNotebook是什么?JupyterNotebook是一个开源的Web应用程序,它允许你创建和共享包含实时代码、方程、可视化和解释性文本的文档。它支持多种编程语言,其中Python是最常用的语言之一。Jupy
Django学习笔记(一)
学习视频为:pythondjangoweb框架开发入门全套视频教程一、安装pipinstalldjango==****检查是否安装成功django.get_version()二、django新建项目操作1、新建一个项目django-adminstartprojectproject_name2、新建APPcdproject_namedjango-adminstartappApp注:一个project
Python 程序设计讲义(26):字符串的用法——字符的编码
睿思达DBA_WGX
Python 讲义 python 开发语言
Python程序设计讲义(26):字符串的用法——字符的编码目录Python程序设计讲义(26):字符串的用法——字符的编码一、字符的编码二、`ASCII`编码三、`Unicode`编码四、使用`ord()`函数查询一个字符对应的`Unicode`编码五、使用`chr()`函数查询一个`Unicode`编码对应的字符六、`Python`字符串的特征一、字符的编码计算机默认只能处理二进制数,而不能处
【Python】pypinyin-汉字拼音转换工具
鸟哥大大
Python python 自然语言处理
文章目录1.主要功能2.安装3.常用API3.1拼音风格3.2核心API3.2.1pypinyin.pinyin()3.2.2pypinyin.lazy_pinyin()3.2.3pypinyin.load_single_dict()3.2.4pypinyin.load_phrases_dict()3.2.5pypinyin.slug()3.3注册新的拼音风格4.基本用法4.1库导入4.2基本汉字
python编程第十四课:数据可视化
小小源助手
Python代码实例 信息可视化 python 开发语言
Python数据可视化:让数据“开口说话”在当今数据爆炸的时代,数据可视化已成为探索数据规律、传达数据信息的关键技术。Python凭借其丰富的第三方库,为数据可视化提供了强大而灵活的解决方案。本文将带你深入了解Matplotlib库的基础绘图、Seaborn库的高级可视化以及交互式可视化工具Plotly,帮助你通过图表清晰地展示数据背后的故事。一、Matplotlib库基础绘图Matplotlib
Python数据可视化:用代码绘制数据背后的故事
AAEllisonPang
Python 信息可视化 python 开发语言
引言:当数据会说话在数据爆炸的时代,可视化是解锁数据价值的金钥匙。Python凭借其丰富的可视化生态库,已成为数据科学家的首选工具。本文将带您从基础到高级,探索如何用Python将冰冷数字转化为引人入胜的视觉叙事。一、基础篇:二维可视化的艺术表达1.1Matplotlib:可视化领域的瑞士军刀importmatplotlib.pyplotaspltimportnumpyasnpx=np.linsp
python学习笔记(汇总)
朕的剑还未配妥
python学习笔记整理 python 学习 开发语言
文章目录一.基础知识二.python中的数据类型三.运算符四.程序的控制结构五.列表六.字典七.元组八.集合九.字符串十.函数十一.解决bug一.基础知识print函数字符串要加引号,数字可不加引号,如print(123.4)print('小谢')print("洛天依")还可输入表达式,如print(1+3)如果使用三引号,print打印的内容可不在同一行print("line1line2line
PDF转Markdown - Python 实现方案与代码
Eiceblue
Python Python PDF pdf python 开发语言 vscode
PDF作为广泛使用的文档格式,转换为轻量级标记语言Markdown后,可无缝集成到技术文档、博客平台和版本控制系统中,提高内容的可编辑性和可访问性。本文将详细介绍如何使用国产Spire.PDFforPython库将PDF文档转换为Markdown格式。技术优势:精准保留原始文档结构(段落/列表/表格)完整提取文本和图像内容无需Adobe依赖的纯Python实现支持Linux/Windows/mac
使用Python和Gradio构建实时数据可视化工具
PythonAI编程架构实战家
信息可视化 python 开发语言 ai
使用Python和Gradio构建实时数据可视化工具关键词:Python、Gradio、数据可视化、实时数据、Web应用、交互式界面、数据科学摘要:本文将详细介绍如何使用Python和Gradio框架构建一个实时数据可视化工具。我们将从基础概念开始,逐步深入到核心算法实现,包括数据处理、可视化技术以及Gradio的交互式界面设计。通过实际项目案例,读者将学习如何创建一个功能完整、响应迅速的实时数据
Python Gradio:实现交互式图像编辑
PythonAI编程架构实战家
Python编程之道 python 开发语言 ai
PythonGradio:实现交互式图像编辑关键词:Python,Gradio,交互式图像编辑,计算机视觉,深度学习,图像处理,Web应用摘要:本文将深入探讨如何使用Python的Gradio库构建交互式图像编辑应用。我们将从基础概念开始,逐步介绍Gradio的核心功能,并通过实际代码示例展示如何实现各种图像处理功能。文章将涵盖图像滤镜应用、对象检测、风格迁移等高级功能,同时提供完整的项目实战案例
数据可视化:数据世界的直观呈现
卢政权1
信息可视化 数据分析 数据挖掘
在当今数字化浪潮中,数据呈爆炸式增长。数据可视化作为一种强大的技术手段,能够将复杂的数据转化为直观的图形、图表等形式,让数据背后的信息一目了然。无论是在商业决策、科学研究还是日常数据分析中,数据可视化都发挥着极为重要的作用。它帮助我们快速理解数据的分布、趋势、关联等特征,从而为进一步的分析和行动提供有力支持。接下来,我们将深入探讨数据可视化的奥秘,并通过代码示例展示其实际应用。一、Python数据
Python 程序设计讲义(25):循环结构——嵌套循环
Python程序设计讲义(25):循环结构——嵌套循环目录Python程序设计讲义(25):循环结构——嵌套循环一、嵌套循环的执行流程二、嵌套循环对应的几种情况1、内循环和外循环互不影响2、外循环迭代影响内循环的条件3、外循环迭代影响内循环的循环体嵌套循环是指在一个循环体中嵌套另一个循环。while循环中可以嵌入另一个while循环或for循环。反之,也可以在for循环中嵌入另一个for循环或wh
基于Python引擎的PP-OCR模型库推理
张欣-男
python ocr 开发语言 PaddleOCR PaddlePaddle
基于Python引擎的PP-OCR模型库推理1.文本检测模型推理#下载超轻量中文检测模型:wgethttps://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tartarxfch_PP-OCRv3_det_infer.tarpython3tools/infer/predict_det.py--image_dir=".
一个开源AI牛马神器 | AiPy,平替Manus,装完直接上手写Python!
Agent加载失败
人工智能 python 开源 算法 AI编程
还记得三个月前那个在闲鱼被炒到万元邀请码的Manus吗?现在你点官网,直接提示「所在地区不可用」了它走了,但更香的国产开源项目出现了:AiPy(爱派)。主打一个极致简化的AIAgent理念:别搞什么插件市场、Agent路由,直接给AI一个Python解释器,让它用自然语言写代码干活。听起来狠活?实际体验更狠:•完全本地化,界面傻瓜式操作,支持自然语言生成&执行Python任务;•数据清洗、文档总结
零数学基础理解AI核心概念:梯度下降可视化实战
九章云极AladdinEdu
人工智能 gpu算力 深度学习 pytorch python 语言模型 opencv
点击“AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。用Python动画演示损失函数优化过程,数学公式具象化读者收获:直观理解模型训练本质,破除"数学恐惧症"当盲人登山者摸索下山路径时,他本能地运用了梯度下降算法。本文将用动态可视化技术,让你像感受重力一样理解AI训练的核心原理——无需任何数学公式推导。一、梯度下降:AI世界的"万有
2025.07 Java入门笔记01
殷浩焕
笔记
一、熟悉IDEA和Java语法(一)LiuCourseJavaOOP1.一直在用C++开发,python也用了些,Java是真的不熟,用什么IDE还是问的同事;2.一开始安装了jdk-23,拿VSCode当编辑器,在cmd窗口编译运行,也能玩;但是想正儿八经搞项目开发,还是需要IDE;3.安装了IDEA社区版:(1)IDE通常自带对应编程语言的安装包,例如IDEA自带jbr-21(和jdk是不同的
响应式编程实践:Spring Boot WebFlux构建高性能非阻塞服务
fanxbl957
Web spring boot 后端 java
博主介绍:Java、Python、js全栈开发“多面手”,精通多种编程语言和技术,痴迷于人工智能领域。秉持着对技术的热爱与执着,持续探索创新,愿在此分享交流和学习,与大家共进步。全栈开发环境搭建运行攻略:多语言一站式指南(环境搭建+运行+调试+发布+保姆级详解)感兴趣的可以先收藏起来,希望帮助更多的人响应式编程实践:SpringBootWebFlux构建高性能非阻塞服务一、引言在当今数字化时代,互
Python STL概念学习与代码实践
体制教科书
本文还有配套的精品资源,点击获取简介:通过”py_stl_learning”项目,学习者可以使用Python实现和理解C++STL的概念,包括数据结构、算法、容器适配器、模板和泛型容器等。Python中的列表、集合、字典等数据结构与STL中的vector、set、map等类似,而Python的itertools和functools模块提供了STL风格的算法功能。Python通过其面向对象的特性以及
HQL之投影查询
归来朝歌
HQL Hibernate 查询语句 投影查询
在HQL查询中,常常面临这样一个场景,对于多表查询,是要将一个表的对象查出来还是要只需要每个表中的几个字段,最后放在一起显示?
针对上面的场景,如果需要将一个对象查出来:
HQL语句写“from 对象”即可
Session session = HibernateUtil.openSession();
Spring整合redis
bylijinnan
redis
pom.xml
<dependencies>
<!-- Spring Data - Redis Library -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redi
org.hibernate.NonUniqueResultException: query did not return a unique result: 2
0624chenhong
Hibernate
参考:http://blog.csdn.net/qingfeilee/article/details/7052736
org.hibernate.NonUniqueResultException: query did not return a unique result: 2
在项目中出现了org.hiber
android动画效果
不懂事的小屁孩
android动画
前几天弄alertdialog和popupwindow的时候,用到了android的动画效果,今天专门研究了一下关于android的动画效果,列出来,方便以后使用。
Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。
第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。
js delete 删除机理以及它的内存泄露问题的解决方案
换个号韩国红果果
JavaScript
delete删除属性时只是解除了属性与对象的绑定,故当属性值为一个对象时,删除时会造成内存泄露 (其实还未删除)
举例:
var person={name:{firstname:'bob'}}
var p=person.name
delete person.name
p.firstname -->'bob'
// 依然可以访问p.firstname,存在内存泄露
Oracle将零干预分析加入网络即服务计划
蓝儿唯美
oracle
由Oracle通信技术部门主导的演示项目并没有在本月较早前法国南斯举行的行业集团TM论坛大会中获得嘉奖。但是,Oracle通信官员解雇致力于打造一个支持零干预分配和编制功能的网络即服务(NaaS)平台,帮助企业以更灵活和更适合云的方式实现通信服务提供商(CSP)的连接产品。这个Oracle主导的项目属于TM Forum Live!活动上展示的Catalyst计划的19个项目之一。Catalyst计
spring学习——springmvc(二)
a-john
springMVC
Spring MVC提供了非常方便的文件上传功能。
1,配置Spring支持文件上传:
DispatcherServlet本身并不知道如何处理multipart的表单数据,需要一个multipart解析器把POST请求的multipart数据中抽取出来,这样DispatcherServlet就能将其传递给我们的控制器了。为了在Spring中注册multipart解析器,需要声明一个实现了Mul
POJ-2828-Buy Tickets
aijuans
ACM_POJ
POJ-2828-Buy Tickets
http://poj.org/problem?id=2828
线段树,逆序插入
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;#define N 200010struct
Java Ant build.xml详解
asia007
build.xml
1,什么是antant是构建工具2,什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3,ant的好处跨平台 --因为ant是使用java实现的,所以它跨平台使用简单--与ant的兄弟make比起来语法清晰--同样是和make相比功能强大--ant能做的事情很多,可能你用了很久,你仍然不知道它能有
android按钮监听器的四种技术
百合不是茶
android xml配置 监听器 实现接口
android开发中经常会用到各种各样的监听器,android监听器的写法与java又有不同的地方;
1,activity中使用内部类实现接口 ,创建内部类实例 使用add方法 与java类似
创建监听器的实例
myLis lis = new myLis();
使用add方法给按钮添加监听器
软件架构师不等同于资深程序员
bijian1013
程序员 架构师 架构设计
本文的作者Armel Nene是ETAPIX Global公司的首席架构师,他居住在伦敦,他参与过的开源项目包括 Apache Lucene,,Apache Nutch, Liferay 和 Pentaho等。
如今很多的公司
TeamForge Wiki Syntax & CollabNet User Information Center
sunjing
TeamForge How do Attachement Anchor Wiki Syntax
the CollabNet user information center http://help.collab.net/
How do I create a new Wiki page?
A CollabNet TeamForge project can have any number of Wiki pages. All Wiki pages are linked, and
【Redis四】Redis数据类型
bit1129
redis
概述
Redis是一个高性能的数据结构服务器,称之为数据结构服务器的原因是,它提供了丰富的数据类型以满足不同的应用场景,本文对Redis的数据类型以及对这些类型可能的操作进行总结。
Redis常用的数据类型包括string、set、list、hash以及sorted set.Redis本身是K/V系统,这里的数据类型指的是value的类型,而不是key的类型,key的类型只有一种即string
SSH2整合-附源码
白糖_
eclipse spring tomcat Hibernate Google
今天用eclipse终于整合出了struts2+hibernate+spring框架。
我创建的是tomcat项目,需要有tomcat插件。导入项目以后,鼠标右键选择属性,然后再找到“tomcat”项,勾选一下“Is a tomcat project”即可。具体方法见源码里的jsp图片,sql也在源码里。
补充1:项目中部分jar包不是最新版的,可能导
[转]开源项目代码的学习方法
braveCS
学习方法
转自:
http://blog.sina.com.cn/s/blog_693458530100lk5m.html
http://www.cnblogs.com/west-link/archive/2011/06/07/2074466.html
1)阅读features。以此来搞清楚该项目有哪些特性2)思考。想想如果自己来做有这些features的项目该如何构架3)下载并安装d
编程之美-子数组的最大和(二维)
bylijinnan
编程之美
package beautyOfCoding;
import java.util.Arrays;
import java.util.Random;
public class MaxSubArraySum2 {
/**
* 编程之美 子数组之和的最大值(二维)
*/
private static final int ROW = 5;
private stat
读书笔记-3
chengxuyuancsdn
jquery笔记 resultMap配置 ibatis一对多配置
1、resultMap配置
2、ibatis一对多配置
3、jquery笔记
1、resultMap配置
当<select resultMap="topic_data">
<resultMap id="topic_data">必须一一对应。
(1)<resultMap class="tblTopic&q
[物理与天文]物理学新进展
comsci
如果我们必须获得某种地球上没有的矿石,才能够进行某些能量输出装置的设计和建造,而要获得这种矿石,又必须首先进行深空探测,而要进行深空探测,又必须获得这种能量输出装置,这个矛盾的循环,会导致地球联盟在与宇宙文明建立关系的时候,陷入困境
怎么办呢?
 
Oracle 11g新特性:Automatic Diagnostic Repository
daizj
oracle ADR
Oracle Database 11g的FDI(Fault Diagnosability Infrastructure)是自动化诊断方面的又一增强。
FDI的一个关键组件是自动诊断库(Automatic Diagnostic Repository-ADR)。
在oracle 11g中,alert文件的信息是以xml的文件格式存在的,另外提供了普通文本格式的alert文件。
这两份log文
简单排序:选择排序
dieslrae
选择排序
public void selectSort(int[] array){
int select;
for(int i=0;i<array.length;i++){
select = i;
for(int k=i+1;k<array.leng
C语言学习六指针的经典程序,互换两个数字
dcj3sjt126com
c
示例程序,swap_1和swap_2都是错误的,推理从1开始推到2,2没完成,推到3就完成了
# include <stdio.h>
void swap_1(int, int);
void swap_2(int *, int *);
void swap_3(int *, int *);
int main(void)
{
int a = 3;
int b =
php 5.4中php-fpm 的重启、终止操作命令
dcj3sjt126com
PHP
php 5.4中php-fpm 的重启、终止操作命令:
查看php运行目录命令:which php/usr/bin/php
查看php-fpm进程数:ps aux | grep -c php-fpm
查看运行内存/usr/bin/php -i|grep mem
重启php-fpm/etc/init.d/php-fpm restart
在phpinfo()输出内容可以看到php
线程同步工具类
shuizhaosi888
同步工具类
同步工具类包括信号量(Semaphore)、栅栏(barrier)、闭锁(CountDownLatch)
闭锁(CountDownLatch)
public class RunMain {
public long timeTasks(int nThreads, final Runnable task) throws InterruptedException {
fin
bleeding edge是什么意思
haojinghua
DI
不止一次,看到很多讲技术的文章里面出现过这个词语。今天终于弄懂了——通过朋友给的浏览软件,上了wiki。
我再一次感到,没有辞典能像WiKi一样,给出这样体贴人心、一清二楚的解释了。为了表达我对WiKi的喜爱,只好在此一一中英对照,给大家上次课。
In computer science, bleeding edge is a term that
c中实现utf8和gbk的互转
jimmee
c iconv utf8&gbk编码
#include <iconv.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
int code_c
大型分布式网站架构设计与实践
lilin530
应用服务器 搜索引擎
1.大型网站软件系统的特点?
a.高并发,大流量。
b.高可用。
c.海量数据。
d.用户分布广泛,网络情况复杂。
e.安全环境恶劣。
f.需求快速变更,发布频繁。
g.渐进式发展。
2.大型网站架构演化发展历程?
a.初始阶段的网站架构。
应用程序,数据库,文件等所有的资源都在一台服务器上。
b.应用服务器和数据服务器分离。
c.使用缓存改善网站性能。
d.使用应用
在代码中获取Android theme中的attr属性值
OliveExcel
android theme
Android的Theme是由各种attr组合而成, 每个attr对应了这个属性的一个引用, 这个引用又可以是各种东西.
在某些情况下, 我们需要获取非自定义的主题下某个属性的内容 (比如拿到系统默认的配色colorAccent), 操作方式举例一则:
int defaultColor = 0xFF000000;
int[] attrsArray = { andorid.r.
基于Zookeeper的分布式共享锁
roadrunners
zookeeper 分布式 共享锁
首先,说说我们的场景,订单服务是做成集群的,当两个以上结点同时收到一个相同订单的创建指令,这时并发就产生了,系统就会重复创建订单。等等......场景。这时,分布式共享锁就闪亮登场了。
共享锁在同一个进程中是很容易实现的,但在跨进程或者在不同Server之间就不好实现了。Zookeeper就很容易实现。具体的实现原理官网和其它网站也有翻译,这里就不在赘述了。
官
两个容易被忽略的MySQL知识
tomcat_oracle
mysql
1、varchar(5)可以存储多少个汉字,多少个字母数字? 相信有好多人应该跟我一样,对这个已经很熟悉了,根据经验我们能很快的做出决定,比如说用varchar(200)去存储url等等,但是,即使你用了很多次也很熟悉了,也有可能对上面的问题做出错误的回答。 这个问题我查了好多资料,有的人说是可以存储5个字符,2.5个汉字(每个汉字占用两个字节的话),有的人说这个要区分版本,5.0
zoj 3827 Information Entropy(水题)
阿尔萨斯
format
题目链接:zoj 3827 Information Entropy
题目大意:三种底,计算和。
解题思路:调用库函数就可以直接算了,不过要注意Pi = 0的时候,不过它题目里居然也讲了。。。limp→0+plogb(p)=0,因为p是logp的高阶。
#include <cstdio>
#include <cstring>
#include <cmath&