事实:自动采集编写 最近Python这门语言太火,说是学习后会提升工作效率,是真的吗?小白能学会吗?

优采云 发布时间: 2020-08-28 20:26

  自动采集编写 最近Python这门语言太火,说是学习后会提升工作效率,是真的吗?小白能学会吗?

  在有关大数据分析Python API的本教程中,我们将学习怎样从远程网站检索数据以进行数据科学项目。像baidu,Twitter和Facebook之类的网站都通过其应用程序编程接口(API)向程序员提供个别数据。要使用API,你须要向远程Web服务器发出恳求,然后检索所需的数据。

  但是,为什么要使用API而不是可以下载的静态数据集呢?API在以下情况下很有用:

  a.数据变化很快。股票价位数据就是一个事例。重新生成数据集并每分钟下载一次并没有实际意义-这会占用大量带宽,而且速率太慢。

  b.您须要一小部份更大的数据。Reddit评论就是一个事例。如果您只想在Reddit上发表自己的评论该如何办?下载整个Reddit数据库,然后仅过滤您自己的注释并没有多大意义。

  c.涉及重复估算。Spotify的API可以告诉您音乐的流派。从理论上讲,您可以创建自己的分类器,并使用它对音乐进行分类,但您将永远不会拥有Spotify所拥有的数据。

  在上述情况下,API是正确的解决方案。对于本数据科学教程,我们将查询一个简单的API,以检索有关国际空间站(ISS)的数据。使用API可以节约我们自己进行所有估算的时间和精力。

  大数据分析Python中的API恳求

  API托管在Web服务器上。当您在浏览器的地址栏中键入内容时,您的计算机实际上是在向服务器寻问网页,然后该网页返回到您的浏览器。

  API的工作方式几乎相同,除了您的程序要求数据而不是您的Web浏览器寻问网页之外。这些数据一般以JSON格式返回(有关更多信息,请参阅有关使用JSON数据的教程)。

  为了获取数据,我们向Web服务器发出恳求。然后,服务器将回复我们的数据。在大数据分析Python中,我们将使用恳求库来执行此操作。在此大数据剖析Python API教程中,我们将为所有示例使用大数据分析Python 3.4。

  请求类型

  有许多不同类型的恳求。最常用的一个GET恳求用于检索数据。

  我们可以使用一个简单的GET恳求从OpenNotify API 检索信息。

  OpenNotify具有多个API端点。端点是用于从API检索不同数据的服务器路由。例如,/commentsReddit API上的端点可能会检索有关注释的信息,而/users端点可能会检索有关用户的数据。要访问它们,您可以将端点添加到API 的基本URL中。

  我们将在OpenNotify上见到的第一个端点是iss-now.json端点。该端点获取国际空间站的当前经度和纬度。如您所见,检索此数据不适用于数据集,因为它涉及服务器上的一些估算,并且变化很快。

  您可以在此处查看OpenNotify上所有端点的列表。

  OpenNotify API 的基本网址是,因此我们将其添加到所有端点的开头。

  

  状态码

  我们刚才发出的恳求的状态码为200。向Web服务器发出的每位恳求都返回状态代码。状态代码指示有关恳求发生的情况的信息。以下是与GET恳求相关的一些代码:

  

  a)200 -一切正常,结果已返回(如果有)

  b)301—服务器正在将您重定向到其他端点。当公司切换域名或修改端点名称时,可能会发生此类情况。

  c)401-服务器觉得您未通过身分验证。当您没有发送正确的凭据来访问API时才会发生此类情况(我们将在之后的文章中讨论身分验证)。

  d)400-服务器觉得您提出了错误的恳求。当您没有正确发送数据时,可能会发生此类情况。

  e)403 —您尝试访问的资源被严禁—您没有正确的权限查看它。

  f)404 -在服务器上找不到您尝试访问的资源。

  现在,根据API文档,向不存在的端点发出GET恳求。

  击中正确的终点

  iss-pass不是有效的端点,因此我们得到了一个404状态码作为相应。.json正如API文档所述,我们忘掉在最后添加。

  现在,我们将向发出GET恳求。

  

  查询参数

  您将在上一个示例中见到,我们得到了一个400状态码,表示恳求错误。如果您查看OpenNotify API的文档,我们会发觉ISS Pass端点须要两个参数。

  当ISS上次通过月球上的给定位置时,将返回ISS Pass端点。为了对此进行估算,我们须要将位置的座标传递给API。为此,我们传递了两个参数-纬度和纬度。

  为此,我们可以在params恳求中添加可选的关键字参数。在这些情况下,我们须要传递两个参数:

  1)lat —我们想要的位置的经度。

  2)lon —我们想要的位置的纬度。

  我们可以使用这种参数制做字典,然后将它们传递给requests.get函数。

  我们还可以通过将查询参数添加到url中来直接做同样的事情,如下所示:。

  将参数设置为字典几乎总是可取的,因为requests它可以处理一些事情,例如正确设置查询参数的格式。

  我们将使用纽约市的座标进行恳求,然后查看得到的答复。

  

  b'{n "message": "success", n "request": {n "altitude": 100, n "datetime": 1441417753, n "latitude": 40.71, n "longitude": -74.0, n "passes": 5n }, n "response": [n {n "duration": 330, n "risetime": 1441445639n }, n {n "duration": 629, n "risetime": 1441451226n }, n {n "duration": 606, n "risetime": 1441457027n }, n {n "duration": 542, n "risetime": 1441462894n }, n {n "duration": 565, n "risetime": 1441468731n }n ]n}'

  b'{n "message": "success", n "request": {n "altitude": 100, n "datetime": 1441417753, n "latitude": 40.71, n "longitude": -74.0, n "passes": 5n }, n "response": [n {n "duration": 329, n "risetime": 1441445639n }, n {n "duration": 629, n "risetime": 1441451226n }, n {n "duration": 606, n "risetime": 1441457027n }, n {n "duration": 542, n "risetime": 1441462894n }, n {n "duration": 565, n "risetime": 1441468731n }n ]n}'

  使用JSON数据

  您可能早已注意到,响应的内容之前是a string(尽管它显示为bytes对象,但是我们可以使用轻松地将内容转换为字符串response.content.decode("utf-8"))。

  字符串是我们将信息来回传递给API的方法,但是很难从字符串中获取我们想要的信息。我们怎么晓得怎样解码返回的字符串并在大数据分析Python中使用它?我们怎么altitude从字符串响应中找出ISS的含意?

  幸运的是,有一种名为JavaScript Object Notation(JSON)的格式。JSON是一种将列表和字典之类的数据结构编码为字符串的方式,以确保它们便于被机器读取。JSON是将数据来回传递给API的主要格式,大多数API服务器将以JSON格式发送其响应。

  json套件随附大数据分析Python强悍的JSON支持。该json软件包是标准库的一部分,因此我们无需安装任何程序即可使用它。我们既可以将列表和字典转换为JSON,也可以将字符串转换为列表和字典。就我们的ISS Pass数据而言,它是一个字典,编码为JSON格式的字符串。

  json库有两种主要方式:

  1)dumps —接收一个大数据剖析Python对象,并将其转换为字符串。

  2)loads —接收JSON字符串,并将其转换为大数据分析Python对象。

  

  从API恳求获取JSON

  通过使用.json()响应上的方式,您可以将响应的内容作为大数据分析Python对象获取。

  

  {'response': [{'risetime': 1441456672, 'duration': 369}, {'risetime': 1441462284, 'duration': 626}, {'risetime': 1441468104, 'duration': 581}, {'risetime': 1441474000, 'duration': 482}, {'risetime': 1441479853, 'duration': 509}], 'message': 'success', 'request': {'latitude': 37.78, 'passes': 5, 'longitude': -122.41, 'altitude': 100, 'datetime': 1441417753}}

  内容类型

  服务器除了会在生成响应时发送状态码和数据。它还发送收录有关怎样生成数据以及怎样对其进行解码的信息的元数据。这储存在响应头中。在大数据分析Python中,我们可以使用headers响应对象的属性来访问它。

  标头将显示为字典。在标题中,content-type是目前最重要的键。它告诉我们响应的格式以及怎样对其进行解码。大数据分析Python API入门教程对于OpenNotify API,格式为JSON,这就是为何我们可以json更早地使用包对其进行解码的诱因。

  

  寻找太空中的人数

  OpenNotify还有一个API端点astros.json。它告诉你当前有多少人在太空中。相应的格式可以在这里找到。

  

  9

  {'number': 9, 'people': [{'name': 'Gennady Padalka', 'craft': 'ISS'}, {'name': 'Mikhail Kornienko', 'craft': 'ISS'}, {'name': 'Scott Kelly', 'craft': 'ISS'}, {'name': 'Oleg Kononenko', 'craft': 'ISS'}, {'name': 'Kimiya Yui', 'craft': 'ISS'}, {'name': 'Kjell Lindgren', 'craft': 'ISS'}, {'name': 'Sergey Volkov', 'craft': 'ISS'}, {'name': 'Andreas Mogensen', 'craft': 'ISS'}, {'name': 'Aidyn Aimbetov', 'craft': 'ISS'}], 'message': 'success'}

  大数据分析Python API数据科学教程:后续步骤

  现在,您早已完成了大数据分析Python API教程,现在应当可以访问简单的API并发出get恳求了。requests在我们的dataquest API和抓取课程中,还有其他几种类型,您可以了解更多信息以及与API身分验证一起使用。

  建议的其他后续步骤是阅读恳求文档,并使用Reddit API。有一个名为PRAW 的程序包,它让在大数据分析Python中使用Reddit API愈发容易,但是建议requests首先使用它来了解一切的工作原理。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线