python
Flask 是什么?我想打开这篇文章的你应该不陌生,但是我还引用维基百科上的内容做个简短的介绍。
在 外行学 Python 爬虫 第九篇 读取数据库中的数据 中完成了使用 API 从数据库中读取所需要的数据,但是返回的是 JSON 格式,看到的是一串的字符串数据不是很好理解,这篇将介绍如何将数据进行可视化。
前面几个章节利用 python 的基础库实现网络数据的获取、解构以及存储,同时也完成了简单的数据读取操作。在这个过程中使用了其他人完成的功能库来加快我们的爬虫实现过程,对于爬虫也有相应的 python 框架供我们使用「不重复造轮子是程序员的一大特点」,当我们了解爬虫的实现过程以后就可以尝试使用框架来完成自己的爬虫,加快开发速度。
我们说数据表关系时,默认说的是数据表之间的关系「一对多、一对一、多对多等等」。而在实际应用中常常会遇到数据表内的关联,比如现在互联中的一个名词「关注者」和「被关注者」,他们都在用户范围内,只是两个用户之间的关系。
前面的一至八篇我们一直在研究如何从网站上快速、方便的获取数据,并将获取到的数据存储在数据库中。但是将数据存储在数据中并不是我们的目的,获取和存储数据的目的是为了更好的利用这些数据,利用这些数据的前提首先需要从数据库按一定的格式来读取数据,这一篇主要介绍如何实现通过 RESTful API 来获取数据库中的数据。
在前一篇中讲了如何开启多线程来加快爬虫的爬取速度,本节主要对爬虫爬取内容机型优化,将生产商信息单独独立出来作为一张数据库表,不再仅仅是存储一个生产商的名称,同时保存了生产商的网址和介绍。
经过上一篇文章外行学 Python 爬虫 第六篇 动态翻页我们实现了网页的动态的分页,此时我们可以爬取立创商城所有的原件信息了,经过几十个小时的不懈努力,一共获取了 16万+ 条数据,但是软件的效率实在是有点低了,看了下获取 10 万条数据的时间超过了 56 个小时,平均每分钟才获取 30 条数据。
前面几篇文章,初步完成了从网络请求、数据解析、数据存储的整个过程,完成了一个爬虫所需的全部功能。但是通过对数据库中数据的分析会发现数据库中的元件数量比网站上的元件数量少了很多。前面的实现过程通过解析网页中的连接来获取元件详细信息页面,解析出相关的数据。在实际页面中发现有很多的分页现象,通过前面的方式仅能获取第一页的内容,无法获取第二页的内容,这就造成无法爬取所有的页面,最终是获取到的数据比网站上的实际数据小的多。
前面一至四篇我们学习了如何使用 python 来获取网页并将网页中的有效数据解析出来,当获取到有效数据以后,不可能将数据放在内存中,一旦系统出现问题辛辛苦苦获取的数据都付诸东流了,此时需要考虑数据持久化的事情,数据持久化我们有两种选择一是将数据保存在文件中「比如 txt 文件或 execl 文件」,另一种是将数据保存在数据库中。
当你可以从网站上获取网页,也可以将网页中有效的信息提取出来以后,接下来你会做什么?我想它一定是一个肯定的答案『获取整个网站的内容』,毕竟只获取网站上一个网页的内容听起来和看起来都不是那么的高大上,只有将整个网站的内容提取出来它才能称得上爬虫这个有科技感和高大上的名字。
从网络上获取网页内容以后,需要从这些网页中取出有用的信息,毕竟爬虫的职责就是获取有用的信息,而不仅仅是为了下来一个网页。获取网页中的信息,首先需要指导网页内容的组成格式是什么,没错网页是由 HTML「我们成为超文本标记语言,英语:HyperText Markup Language,简称:HTML」 组成的,其次需要解析网页的内容,从中提取出我们想要的信息。
一个无法获取内容的爬虫不是一个真正的爬虫,爬虫的首要目标是从网络上获取内容。目前我们所看到的网页都是通过超文本传输协议「英语:HyperText Transfer Protocol,缩写:HTTP」在服务器和客户端之间进行数据交换。
为什么标题叫做“外行学 Python 爬虫”?是因为本人非 IT 互联网从业人员,唯一能说得上关系的是本人是一个 C 的开发人员,从事的是与嵌入式相关的工作,即与互联网无关,也与数据分析无关。那么为什么要学 Python 爬虫呢?原因一、多一门技能增加自己的职业竞争力。原因二、提升自己的生存「赚钱」能力。
Vue
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
Flask
文件「文本、文档、图片等等」是一个服务器不可缺少的部分,在 使用 Flask 创建 RESTful 服务 介绍了如何使用 Flask 创建一个支持 RESTful API 的服务器。这篇文章介绍如何使用 RESTful API 来完成文件的接收,并将文件保存在静态目录下。
在这篇文章之前,所有的应用都是在命令行使用 Python 直接运行的,但是这种方式只适合在开发过程中使用,并不适合在生产环境中使用,在生产环境中可以使用 uWSGI + Nginx 来部署程序。
Alembic 是一款轻量型的数据库迁移工具,它与 SQLAlchemy 一起共同为 Python 提供数据库管理与迁移支持。
Click 是一个用于快速创建命令行工具的 Python 支持库,Click 具有高度可配置性,使用非常少的代码就可以创造一个优雅的命令行工具,Click 使创建命令行工具变得快速而有趣。
这篇文章的目标是实现一个通过 API 访问的服务端,主要实现以下功能:
Python
Redis 是一种 nosql 数据库,它的数据是保存在内存中的,因此其具有很快的存取速度;Redis 通过定期将数据同步至磁盘来实现数据持久化。
装饰器是应用包装函数的快捷方式。装饰器「decorator」能够在代码运行过程中动态给函数增加功能,或者在不修改他人代码的情况下对其增加新的功能。
在计算机学中,反射(英语:reflection)是指计算机程序在运行时(runtime)可以访问、检测和修改它本身状态或行为的一种能力。[1]用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。
软件模块(Software Module)是一套一致而互相有紧密关连的软件组织。包含了程序和数据结构两个部分。
软件模块是现代软件开发往往利用模块作合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开地被编写的单位,能允许广泛人员同时协作、编写及研究不同的模块。
Python 中操作 Excel 的扩展库主要有: xlwings:在 GitHub 上获得了 1.6k 的 Star。 可结合 VBA 实现对 Excel 的编程。 openpyxl:代码托管在 Bitbucket 上 https://bitbucket.org/openpyxl/openpyxl/src/default/。 简单易用,功能广泛,还支持图表功能,但是对 VBA 支持不好。 pandas:在 GitHub 上获得了 23.8k 的 Star。主要用于数据处理。 win32com:在 GitHub...
服务端完成以后,如果检验应用的效果呢,在线人数/客户端是一个不错的指标。但是客户端的连接通常是短连接「请求建立一次连接,请求完成连接即断开」,基于这种情况服务端需要在每次的客户端请求时记录当前的时间,以此来间接实现在线人数/客户端的统计「比如:5 分钟内过连接的客户端认为处于在线状态」。