在这篇文章中,我们将介绍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)
理解Gunicorn:Python WSGI服务器的基石
范范0825
ipython linux 运维
理解Gunicorn:PythonWSGI服务器的基石介绍Gunicorn,全称GreenUnicorn,是一个为PythonWSGI(WebServerGatewayInterface)应用设计的高效、轻量级HTTP服务器。作为PythonWeb应用部署的常用工具,Gunicorn以其高性能和易用性著称。本文将介绍Gunicorn的基本概念、安装和配置,帮助初学者快速上手。1.什么是Gunico
Python数据分析与可视化实战指南
William数据分析
python python 数据
在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学
python os.environ
江湖偌大
python 深度学习
os.environ['TF_CPP_MIN_LOG_LEVEL']='0'#默认值,输出所有信息os.environ['TF_CPP_MIN_LOG_LEVEL']='1'#屏蔽通知信息(INFO)os.environ['TF_CPP_MIN_LOG_LEVEL']='2'#屏蔽通知信息和警告信息(INFO\WARNING)os.environ['TF_CPP_MIN_LOG_LEVEL']='
Python中os.environ基本介绍及使用方法
鹤冲天Pro
# Python python 服务器 开发语言
文章目录python中os.environos.environ简介os.environ进行环境变量的增删改查python中os.environ的使用详解1.简介2.key字段详解2.1常见key字段3.os.environ.get()用法4.环境变量的增删改查和判断是否存在4.1新增环境变量4.2更新环境变量4.3获取环境变量4.4删除环境变量4.5判断环境变量是否存在python中os.envi
Pyecharts数据可视化大屏:打造沉浸式数据分析体验
我的运维人生
信息可视化 数据分析 数据挖掘 运维开发 技术共享
Pyecharts数据可视化大屏:打造沉浸式数据分析体验在当今这个数据驱动的时代,如何将海量数据以直观、生动的方式展现出来,成为了数据分析师和企业决策者关注的焦点。Pyecharts,作为一款基于Python的开源数据可视化库,凭借其丰富的图表类型、灵活的配置选项以及高度的定制化能力,成为了构建数据可视化大屏的理想选择。本文将深入探讨如何利用Pyecharts打造数据可视化大屏,并通过实际代码案例
Python教程:一文了解使用Python处理XPath
旦莫
Python进阶 python 开发语言
目录1.环境准备1.1安装lxml1.2验证安装2.XPath基础2.1什么是XPath?2.2XPath语法2.3示例XML文档3.使用lxml解析XML3.1解析XML文档3.2查看解析结果4.XPath查询4.1基本路径查询4.2使用属性查询4.3查询多个节点5.XPath的高级用法5.1使用逻辑运算符5.2使用函数6.实战案例6.1从网页抓取数据6.1.1安装Requests库6.1.2代
python os.environ_python os.environ 读取和设置环境变量
weixin_39605414
python os.environ
>>>importos>>>os.environ.keys()['LC_NUMERIC','GOPATH','GOROOT','GOBIN','LESSOPEN','SSH_CLIENT','LOGNAME','USER','HOME','LC_PAPER','PATH','DISPLAY','LANG','TERM','SHELL','J2REDIR','LC_MONETARY','QT_QPA
使用Faiss进行高效相似度搜索
llzwxh888
faiss python
在现代AI应用中,快速和高效的相似度搜索是至关重要的。Faiss(FacebookAISimilaritySearch)是一个专门用于快速相似度搜索和聚类的库,特别适用于高维向量。本文将介绍如何使用Faiss来进行相似度搜索,并结合Python代码演示其基本用法。什么是Faiss?Faiss是一个由FacebookAIResearch团队开发的开源库,主要用于高维向量的相似性搜索和聚类。Faiss
python是什么意思中文-在python中%是什么意思
编程大乐趣
Python中%有两种:1、数值运算:%代表取模,返回除法的余数。如:>>>7%212、%操作符(字符串格式化,stringformatting),说明如下:%[(name)][flags][width].[precision]typecode(name)为命名flags可以有+,-,''或0。+表示右对齐。-表示左对齐。''为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填
Day1笔记-Python简介&标识符和关键字&输入输出
~在杰难逃~
Python python 开发语言 大数据 数据分析 数据挖掘
大家好,从今天开始呢,杰哥开展一个新的专栏,当然,数据分析部分也会不定时更新的,这个新的专栏主要是讲解一些Python的基础语法和知识,帮助0基础的小伙伴入门和学习Python,感兴趣的小伙伴可以开始认真学习啦!一、Python简介【了解】1.计算机工作原理编程语言就是用来定义计算机程序的形式语言。我们通过编程语言来编写程序代码,再通过语言处理程序执行向计算机发送指令,让计算机完成对应的工作,编程
python八股文面试题分享及解析(1)
Shawn________
python
#1.'''a=1b=2不用中间变量交换a和b'''#1.a=1b=2a,b=b,aprint(a)print(b)结果:21#2.ll=[]foriinrange(3):ll.append({'num':i})print(11)结果:#[{'num':0},{'num':1},{'num':2}]#3.kk=[]a={'num':0}foriinrange(3):#0,12#可变类型,不仅仅改变
每日算法&面试题,大厂特训二十八天——第二十天(树)
肥学
⚡算法题⚡面试题每日精进 java 算法 数据结构
目录标题导读算法特训二十八天面试题点击直接资料领取导读肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。上一期我们完成了动态规划二十一天现在我们进行下一项对各类算法进行二十八天的一个小总结。还在等什么快来一起肥学进行二十八天挑战吧!!特别介绍小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章
Python快速入门 —— 第三节:类与对象
孤华暗香
Python快速入门 python 开发语言
第三节:类与对象目标:了解面向对象编程的基础概念,并学会如何定义类和创建对象。内容:类与对象:定义类:class关键字。类的构造函数:__init__()。类的属性和方法。对象的创建与使用。示例:classStudent:def__init__(self,name,age,major):self.name
pyecharts——绘制柱形图折线图
2224070247
信息可视化 python java 数据可视化
一、pyecharts概述自2013年6月百度EFE(ExcellentFrontEnd)数据可视化团队研发的ECharts1.0发布到GitHub网站以来,ECharts一直备受业界权威的关注并获得广泛好评,成为目前成熟且流行的数据可视化图表工具,被应用到诸多数据可视化的开发领域。Python作为数据分析领域最受欢迎的语言,也加入ECharts的使用行列,并研发出方便Python开发者使用的数据
Python 实现图片裁剪(附代码) | Python工具
剑客阿良_ALiang
前言本文提供将图片按照自定义尺寸进行裁剪的工具方法,一如既往的实用主义。环境依赖ffmpeg环境安装,可以参考我的另一篇文章:windowsffmpeg安装部署_阿良的博客-CSDN博客本文主要使用到的不是ffmpeg,而是ffprobe也在上面这篇文章中的zip包中。ffmpy安装:pipinstallffmpy-ihttps://pypi.douban.com/simple代码不废话了,上代码
【华为OD技术面试真题 - 技术面】- python八股文真题题库(4)
算法大师
华为od 面试 python
华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选**1.Python中的`with`**用途和功能自动资源管理示例:文件操作上下文管理协议示例代码工作流程解析优点2.\_\_new\_\_和**\_\_init\_\_**区别__new____init__区别总结3.**切片(Slicing)操作**基本切片语法
python os 环境变量
CV矿工
python 开发语言 numpy
环境变量:环境变量是程序和操作系统之间的通信方式。有些字符不宜明文写进代码里,比如数据库密码,个人账户密码,如果写进自己本机的环境变量里,程序用的时候通过os.environ.get()取出来就行了。os.environ是一个环境变量的字典。环境变量的相关操作importos"""设置/修改环境变量:os.environ[‘环境变量名称’]=‘环境变量值’#其中key和value均为string类
Python爬虫解析工具之xpath使用详解
eqa11
python 爬虫 开发语言
文章目录Python爬虫解析工具之xpath使用详解一、引言二、环境准备1、插件安装2、依赖库安装三、xpath语法详解1、路径表达式2、通配符3、谓语4、常用函数四、xpath在Python代码中的使用1、文档树的创建2、使用xpath表达式3、获取元素内容和属性五、总结Python爬虫解析工具之xpath使用详解一、引言在Python爬虫开发中,数据提取是一个至关重要的环节。xpath作为一门
【华为OD技术面试真题 - 技术面】- python八股文真题题库(1)
算法大师
华为od 面试 python
华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选1.数据预处理流程数据预处理的主要步骤工具和库2.介绍线性回归、逻辑回归模型线性回归(LinearRegression)模型形式:关键点:逻辑回归(LogisticRegression)模型形式:关键点:参数估计与评估:3.python浅拷贝及深拷贝浅拷贝(Shal
nosql数据库技术与应用知识点
皆过客,揽星河
NoSQL nosql 数据库 大数据 数据分析 数据结构 非关系型数据库
Nosql知识回顾大数据处理流程数据采集(flume、爬虫、传感器)数据存储(本门课程NoSQL所处的阶段)Hdfs、MongoDB、HBase等数据清洗(入仓)Hive等数据处理、分析(Spark、Flink等)数据可视化数据挖掘、机器学习应用(Python、SparkMLlib等)大数据时代存储的挑战(三高)高并发(同一时间很多人访问)高扩展(要求随时根据需求扩展存储)高效率(要求读写速度快)
《Python数据分析实战终极指南》
xjt921122
python 数据分析 开发语言
对于分析师来说,大家在学习Python数据分析的路上,多多少少都遇到过很多大坑**,有关于技能和思维的**:Excel已经没办法处理现有的数据量了,应该学Python吗?找了一大堆Python和Pandas的资料来学习,为什么自己动手就懵了?跟着比赛类公开数据分析案例练了很久,为什么当自己面对数据需求还是只会数据处理而没有分析思路?学了对比、细分、聚类分析,也会用PEST、波特五力这类分析法,为啥
Python中深拷贝与浅拷贝的区别
yuxiaoyu.
转自:http://blog.csdn.net/u014745194/article/details/70271868定义:在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复
Python开发常用的三方模块如下:
换个网名有点难
python 开发语言
Python是一门功能强大的编程语言,拥有丰富的第三方库,这些库为开发者提供了极大的便利。以下是100个常用的Python库,涵盖了多个领域:1、NumPy,用于科学计算的基础库。2、Pandas,提供数据结构和数据分析工具。3、Matplotlib,一个绘图库。4、Scikit-learn,机器学习库。5、SciPy,用于数学、科学和工程的库。6、TensorFlow,由Google开发的开源机
Python编译器
鹿鹿~
Python编译器 Python python 开发语言 后端
嘿嘿嘿我又来了啊有些小盆友可能不知道Python其实是有编译器的,也就是PyCharm。你们可能会问到这个是干嘛的又不可以吃也不可以穿好像没有什么用,其实你还说对了这个还真的不可以吃也不可以穿,但是它用来干嘛的呢。用来编译你所打出的代码进行运行(可能这里说的有点不对但是只是个人认为)现在我们来说说PyCharm是用来干嘛的。PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Pyt
一文掌握python面向对象魔术方法(二)
程序员neil
python python 开发语言
接上篇:一文掌握python面向对象魔术方法(一)-CSDN博客目录六、迭代和序列化:1、__iter__(self):定义迭代器,使得类可以被for循环迭代。2、__getitem__(self,key):定义索引操作,如obj[key]。3、__setitem__(self,key,value):定义赋值操作,如obj[key]=value。4、__delitem__(self,key):定义
一文掌握python常用的list(列表)操作
程序员neil
python python 开发语言
目录一、创建列表1.直接创建列表:2.使用list()构造器3.使用列表推导式4.创建空列表二、访问列表元素1.列表支持通过索引访问元素,索引从0开始:2.还可以使用切片操作访问列表的一部分:三、修改列表元素四、添加元素1.append():在末尾添加元素2.insert():在指定位置插入元素五、删除元素1.del:删除指定位置的元素2.remove():删除指定值的第一个匹配项3.pop():
Python实现简单的机器学习算法
master_chenchengg
python python 办公效率 python开发 IT
Python实现简单的机器学习算法开篇:初探机器学习的奇妙之旅搭建环境:一切从安装开始必备工具箱第一步:安装Anaconda和JupyterNotebook小贴士:如何配置Python环境变量算法初体验:从零开始的Python机器学习线性回归:让数据说话数据准备:从哪里找数据编码实战:Python实现线性回归模型评估:如何判断模型好坏逻辑回归:从分类开始理论入门:什么是逻辑回归代码实现:使用skl
python中的深拷贝与浅拷贝
anshejd70787
python
深拷贝和浅拷贝浅拷贝的时候,修改原来的对象,浅拷贝的对象不会发生改变。1、对象的赋值对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。当对对象做赋值或者是参数传递或者作为返回值的时候,总是传递原始对象的引用,而不是一个副本。如下所示:>>>aList=["kel","abc",123]>>>bLis
用Python实现简单的猜数字游戏
程序媛了了
python 游戏 java
猜数字游戏代码:importrandomdefpythonit():a=random.randint(1,100)n=int(input("输入你猜想的数字:"))whilen!=a:ifn>a:print("很遗憾,猜大了")n=int(input("请再次输入你猜想的数字:"))elifna::如果玩家猜的数字n大于随机数字a,则输出"很遗憾,猜大了",并提示玩家再次输入。elifn
用Python实现读取统计单词个数
程序媛了了
python 游戏 java
完整实例代码:fromcollectionsimportCounterdefpythonit():danci={}withopen("pythonit.txt","r",encoding="utf-8")asf:foriinf:words=i.strip().split()forwordinwords:ifwordnotindanci:danci[word]=1else:danci[word]+=
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&