Python 技术 -- Python Spider 深入

发布时间 2023-09-06 20:03:34作者: 尘风风尘

本部分是为 Python Spider 知识简谱的完整描述,若看不懂知识简谱可参阅此部分!-- CF.FC

Python Spider 完整知识

真理之海十分广阔,只有不断地学习并掌握知识,才有可能有朝一日窥见其神秘真面目 -- CF.FC

一、

Python Spider 扩展学习

学习是不断从模仿到创新,建议用"视频+书籍+网站+自我"的方式实现高效完美学习 -- CF.FC

一、URL、URN、URI

URL、URN、URI 概念、URL、URN、URI 关系、URL、URN、URI 概述、URL、URN、URI 详解

1. URL、URN、URI 概念

  • URN(Uniform Resource Name):统一资源名称
  • URL(Uniform Resource Locator):统一资源定位符
  • URI(Uniform Resource Identifier ):统一资源标识符,可把资源独一无二地标识出来

2. URL、URN、URI 关系

  • URL、URN、URI 关系

3. URL、URN、URI 概述

  • URI可分为URL、URN或同时具备 locators 和 names 特性。URN 作用就好像一个人的名字,URL 就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式,通常网络中的 URI 指 URL。URI 指的是一个资源即有 URL、URN 两种方式去访问其资源(URL 用地址定位一个资源,URN 用名称定位一个资源)。如:去寻找一个具体的人(URI);如果用地址:XX省XX市XX区...XX单元XX室的主人 就是URL;如果用身份证号+名字去找就是URN(身份证号+名字 无法确认资源的地址)。

4. URL、URN、URI 详解

  • URI 支持的协议:http、https、ftp、mailto、magnet、telnet、data、file、nfs、gopher、ldap

  • URL 格式如下所示:
    URL 格式

1. 协议:指定使用的传输协议,如:http、https、ftp 等

2. 登录信息:可选,指用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)

3. 服务器地址:可是域名,如:www.jianshu.com;也可是IP,如:192.168.1.10

4. 服务器端口:可选,指定服务器连接的网络端口,若省略则使用该协议的默认端口(http80、https443)

5. 文件路径:指定服务器上的路径来定位指定的资源

6. 参数:可选,用于给动态网页(如:CGI、ISAPI、PHP/JSP/ASP/ASP.NET等)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。

7. 片段:可选,片段用于指定网络资源中的片断。html页面中片段则是描点,如:一个网页中有多个名词解释,可使用片段可直接定位到某一名词解释(描点的位置)。

二、请求和响应

1. 请求

Python Spider 兴趣阅读

Talk is cheap. Show me the code -- Linus

一、Python

1. Python 历史

  Python 是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了脚本语言和解释语言的易用性。

  Python 第一个公开发行版发行于 1991 年,它是纯粹的自由软件,其源代码和解释器都遵循 GPL(GNU General Public License)协议,其图标如下图所示:
Python 之标

  Python 由创始人吉多·范·罗萨姆(Guido van Rossum)于 1989 年圣诞节期间,在荷兰阿姆斯特丹,为打发圣诞节的无趣开发出一个新的解释型脚本语言。Python(中文意思:蟒蛇)作为该编程语言的名字,是因为他选取了他最喜欢的 BBC 喜剧(Monty Python)中的 Python 一词。Python 之父又被称为"龟叔",下图是他本人:
Python 之父


2. Python 设计思想

  Python 被设计成符合大脑思维习惯,采用极简主义的设计理念,加以统一规范的交互模式。使其易学、易理解、易记忆。Python 开发者的哲学是"用一种方法,最好是只有一种方法来做一件事"。

  Python 是完全面向对象的编程语言,其函数、模块、数字、字符串等内置类型都是对象。它的类支持多态、操作符重载、多重继承等高级 OOP(面向对象)概念,且 Python 特有的简洁语法和类型使 OOP 十分易使用。当然 OOP 只是 Python 的一个选择而已,就像 C++ 一样,Python 既支持面向对象编程,也支持面向过程编程的模式。

  Python 是一种解释型语言,目前 Python 的标准实现方式是将源代码的语句编译(转换)为字节码格式,然后通过解释器将字节码解释出来。Python 没有将代码编译成底层的二进制代码,所以相较于 C、C++ 等编译型语言,Python 执行速度会慢一些,但 Python 的解释型语言特性提高了开发速度,同时使它拥有解释型语言易于编写和调试等优点。

  Python 本身被设计为可扩展的,并非所有的特性和功能都集成到语言核心。Python 提供了丰富的 API(应用程序编程接口) 和工具,以便程序员能轻松使用C、C++ 来编写扩充模块。Python 提供了非常完善的基础代码库,包括正则表达式、网络、多线程、GUI、数据库、等。除内置库外,Python 还有大量的第三方库以供使用。

  Python 编译器本身也可被集成到其它需要脚本语言的程序内,因此很多人还把 Python 作为一种"胶水语言"(glue language)来使用,即用 Python 将其他语言程序进行集成和封装。2004 年,Python 已在 Google 内部使用。Google Engine 使用 C++ 编写性能要求极高的部分,然后用 Python 或者 Java、Go 调用相应模块。他们的目的是"Python where we can, C++ where we must",在操控硬件的场合使用 C++,在快速开发时候使用 Python。

  在任意一个 Python 的交互解释器中输入:import this 命令,就可看到 Python 的设计原则即 python 哲学理念(Explicit is better than implicit. 简称:EIBTI)"明了胜于晦涩",也被称为 Python 之禅,下图是 Python 之禅的内容:
Python 之禅


3. Python 优点

  • 1、软件质量高

  Python 秉承了简洁、清晰的语法,以及高度一致的编程模式、始终如一的设计风格,可以保证开发出相当规范的代码。针对错误 Python 提供"安全合理"的退出机制。Python 支持异常处理,能有效捕获和处理程序运行时发生的错误,使你能够监控这些错误并进行处理。Python 代码能打包成模块和包方便管理和发布,很适合团队协同开发。

  • 2、开发速度快

  Python 致力于开发速度的最优化:简洁的语法、动态的类型、无需编译、丰富的库支持等特性使得程序员可快速进行项目开发。Python 往往只要几十行代码就可开发出需要几百行C代码的功能。Python 解析器能很方便地进行代码调试和测试,也可作为一个编程接口嵌入一个应用程序中,使得在开发过程中可直接进行调试,从而避免了耗时而又麻烦的编译过程,大大提高了开发速度和效率。在 Python 中,由于内存管理是由 Python 解释器负责,所以开发人员就可以从内存管理事务中解放出来,仅仅致力于开发计划中首要的应用程序设计,使得 Python 编写的程序错误更少、更加健壮、开发周期更短。

  • 3、功能强大

  Python 不仅功能强大本身也强壮,它还有许多面向其他系统的接口,所以完全可以使用 Python 开发整个系统的原型。为完成更多特定的任务,Python 内置了许多预编码的库工具,从正则表达式到网络编程,再到数据库编程都支持。在 web 领域、数据分析领域等,Python 还有强大的框架以便快速开发服务。例如:Django、TruboGears、Pylons 等。

  • 4、易于扩展

  Python 易于扩展(对于 CPython 可通过C、C++编写的模块进行功能扩展),使其能够成为一种灵活的黏合语言,可以脚本化处理其他系统和组件的行为。

  • 5、跨平台

  Python 是跨平台的,在各种不同的操作系统上(Linux、windows、MacOS、Unix 等)都可以看到 Python 的身影。因 Python 是用 C 写的又因其可移植性使得 Python 可以运行在任何带有 ANSI C 编译器的平台上。尽管有一些针对不同平台开发的特有模块,但是在任何一个平台上用 Python 开发的通用软件都可稍事修改或原封不动地在其他平台上运行。这种可移植性既适用于不同的架构,也适用于不同的操作系统。


4. Python 缺点

  • 1、运行速度慢

  Python 和 C、C++ 程序相比运行速度非常慢,因为 Python 是解释型语言即代码在执行时会一行一行地翻译成 CPU(中央处理器)能理解的机器码(机器指令),这个翻译过程非常耗时所以很慢。而 C 程序是运行前直接编译成 CPU 能执行的机器码,所以非常快。不过根据二八定律,大多数程序对速度要求不高。某些对运行速度要求很高的情况,Python 设计师倾向于用JIT(Just in time)即时编译技术,或用 C、C++ 改写这部分程序。而且你自己的时间是宝贵的资源,比 CPU 时间更珍贵。Python 开发速度带来的效益往往比执行速度带来的损失更为重要,尤其是在现代计算机高速的处理能力情况下。一些改进可能太难以实现,或者可能影响代码的可移植性或可维护性,并非所有的性能改进都值得付出努力。

  • 2、代码不能加密

  Python 发布程序时,实际上是发布源代码。这一点跟 C 语言不同,C 语言不用发布源代码,只需要把编译后的机器码发布出去。要从机器码完整反推出 C 代码是不可能的。


5. Python 方向

  • Web 开发

  Python 提供丰富的模块支持 sockets 编程、多线程编程,能方便快速地开发网络服务程序且支持最新的 XML 技术、json语言、数据库编程,同时 Python 的 ORM(Object-Relational-Mapping)对象关系映射框架,使得操作数据库非常方便。Python 还有优秀的 Django、Tornado、Flask 等 Web 框架,还有众多开源插件的支持,足以适用各种不同的 Web 开发需求。

  • 自动化运维

  Python 对操作系统服务的内置接口,使其成为编写可移植的维护操作系统的管理工具和部件的理想工具。Python 程序可以搜索文件和目录树、运行其他程序、使用进程和线程并行处理。

  • 网络爬虫

  在文本处理方面,python 提供的 re 模块能支持正则表达式,还提供 SGML(SGML(Standard Generalized Markup Language)标准通用标记语言、XML 分析模块,许多程序员利用 python 进行 XML 程序的开发。

  • 图形处理

  Python 有 PIL、Tkinter 等图形库支持能方便进行图形处理。在多媒体应用方面 Python 的 PyOpenGL 模块封装了"OpenGL应用程序编程接口",能进行二和三维图像处理,PyGame 模块可用于编写游戏。

  • 人工智能

  人工智能

  • 大数据分析

  Python 大数据分析学习流程:数据获取->数据存储->数据预处理->数据分析->数据可视化。

  • 机器人

6. Python 种类

  • Cpython

  Python 的官方版本,这是 Python 初始以及维护得最好的实现,使用 C 编写,新的语言特性一般会最先在这里出现。CPython 实现会将源代码文件(py文件)转换成字节码文件(pyc文件),然后运行在Python 虚拟机上,其执行过程为:程序--> C 解释器-->字节码-->机器码-->CPU。

  • Jyhton

  Python 的 Java 实现,此实现可用作 Java 应用程序的脚本语言,或可用于用 Java 类库创建应用程序,它也常用于为 Java 库创建测试。Jython 会将 Python 代码动态编译成 Java 字节码,然后在 JVM 上运行,其执行过程为:程序--> Java 解释器-->字节码-->机器码-->CPU。

  • PyPy

  完全用 Python 编写的 Python 实现。它支持在其他实现中没有找到的几个高级功能,如:stackless 支持和一个JIT(Just in Time)编译器,PyPy 将 Python 的源码翻编译成字节码再编译成机器码,其执行过程为:程序-->字节码-->机器码-->CPU。

  • Python for .NET

  一个可让 Python 程序员近乎无缝的集成 .NET 通用语言环境 CLR 和以及为 .NET 开发者提供一个强大的应用脚本工具。

  • IronPython

  一种在 .NET 和 Mono(Xamarin 公司开发的跨平台 .NET 运行环境)上实现的 Python 语言,由 Jim Hugunin(同时也是 Jython 创造者)所创造。Ironpython 是 .NET 在 Python 下的实现,而 CPython 是 C 在 Python 的实现,两者作用相同只是平台不同,所以装了 Ironpython 并不需要装 Python ,当然两者也可共存。

  • RubyPython

  RubyPython 是 Ruby 和 Python 解释器之间的桥梁。

  • Brython

  一种流行的 Python 解释器,可将 Python 转换为 JavaScript(JS) 代码。


7. Python 版本

  • Python 2.X

  Python 2.x的最后一个版本是 Python2.7(于2010年发布),官方将支持到2020年。

  • Python 3

  Python 3.X的第一个版本python 3.0(于2008年发布),Python 3.X 不兼容 Python 2.X 版本,官方也有发布 Python2.6 作为过渡到 Python 3.0 的版本,2.6之后版本都为过渡版本。为什么要开发 Python 3.X 版本呢?因为 Python 发展了 20 多年,里面有很多重复功能、重复模块,导致很多代码变得不那么简洁,所以 Guido 决定进行一次彻底的升级,原则是去繁从简,从而有了后续的 Python 3.X 版本。


二、大数据的特征

1. Volume(大量)
  大数据的特征首先是数据规模大。随着互联网、物联网、移动互联技术的发展,人和事物的所有轨迹都可以被记录下来,数据呈现出爆发性增长。数据相关计量单位的换算关系如下所示:

Byte	1Byte(B) = 8bit(b)
KB		1KB   = 1024 B
MB		1MB   = 1024KB
GB		1GB   = 1024MB
TB		1TB   = 1024GB
PB		1PB   = 1024TB
EB		1EB   = 1024PB
ZB		1ZB   = 1024EB
YB		1YB   = 1024ZB
BB		1BB   = 1024YB

2. Variety(多样)
  数据来源的广泛性,决定了数据形式的多样性。大数据可分为三类,一是结构化数据,如:财务系统数据、信息管理系统数据、医疗系统数据等,其特点是数据间因果关系强;一是非结构化的数据,如:视频、图片、音频等,其特点是数据间没有因果关系;三是半结构化数据,如:HTML文档、邮件、网页等,其特点是数据间的因果关系弱。有统计显示,目前结构化数据占据整个互联网数据量的75%以上,而产生价值的大数据,往往是这些非结构化数据。

3. Velocity(高速)
  数据的增长速度和处理速度是大数据高速性的重要体现。与以往的报纸、书信等传统数据载体生产传播方式不同,在大数据时代,大数据的交换和传播主要是通过互联网和云计算等方式实现的,其生产和传播数据的速度是非常迅速的。另外,大数据还要求处理数据的响应速度要快,如:上亿条数据的分析必须在几秒内完成。数据的输人、处理、丢弃必须立刻见效,几乎无延迟。

4. Value(价值)
  大数据的核心特征是价值。价值密度的高低和数据总量大小成反比,即数据价值密度越高数据总量越小,数据价值密度越低数据总量越大。任何有价值的信息的提取依托的就是海量的基础数据。当然目前大数据背景下有个未解决的问题,如:怎样通过强大的机器算法更迅速地在海量数据中完成数据的价值提纯。

5. 4V 的结构图
  4V图示


三、Python 常用库

1. 请求库(用于实现 HTTP 的请求)

  • 1、urllib:用于操作 URL
  • 2、aiohttp:基于 asyncio 实现的 HTTP 框架,使用异步库进行数据抓取可大大提高效率
  • 3、selenium:自动化测试工具,通过此库你可直接调用浏览器完成某些操作,如:输入验证码
  • 4、requests:基于 urllib 编写,阻塞式 HTTP 请求库,即发出请求直到服务器响应后程序才下一步

2. 解析库(用于从网页中提取信息)

  • 1、lxml:支持 HTML 和 XML 的解析,支持 XPath 解析方式,而且解析效率非常高
  • 2、tesserocr:一个 OCR 库,在遇到验证码(图形验证码为主)时,可直接用 OCR 识别
  • 3、beautifulsoup:用于 html 和 XML 的解析,进而从网页中提取信息,拥有强大的 API
  • 4、pyquery:jQuery 的 Python 实现,能以 jQuery 语法来操作解析 HTML 文档,易用、解析快

3. 存储库(Python与数据库的交互)

  • 1、pymysql:一个纯 Python 实现的 MySQL 客户端操作库
  • 2、pymongo:一个用于直接连接 mongodb 数据库进行查询操作的库
  • 3、redisdump:一个用于 redis 数据导入/导出的工具基于 ruby 实现,使用前需先安装 Ruby

4. 爬虫框架(便于开发爬虫相关程序)

  • 1、Portia:可视化爬取网页内容
  • 2、newspaper:提取新闻、文章以及内容分析
  • 3、python-goose:Java 编写的文章提取工具
  • 4、cola:一个分布式爬虫框架,虽然项目整体设计有点糟但模块间耦合度较高
  • 5、Scrapy:很强大的爬虫框架,适用于爬取简单的页面,但对稍复杂的页面则不适用
  • 6、Crawley:高速爬取对应网站的内容,支持关系和非关系数据库,数据可导出为 JSON、XML 等

5. Web 框架库(便于开发 Web 服务程序)

  • 1、flask:轻量级的 web 服务程序,简单、易用、灵活,主要用来做一些 API 服务
  • 2、django:一个 web 服务器框架,提供了完整的后台管理,引擎、接口等,用它可制作完整网站