本部分是为 Python Spider 的简单描述,适合于复习和思路回溯 -- CF.FC
Python Spider 知识简谱
简约、简洁、简单 -- 尘风风尘
一、网络爬虫入门
人不是机器,学习的时候不要死记硬背,应该用脑子去解决大多数问题 -- CF.FC
1.1 网络爬虫简介
网络爬虫原理、网络爬虫分类、网络爬虫应用
1.1.1 网络爬虫原理
网络爬虫起源、网络爬虫别名、网络爬虫作用、网络爬虫本质、网络爬虫理解、网络爬虫原理
- 网络爬虫起源:数据价值大且量多
- 网络爬虫别名:网络蜘蛛(Spider)
- 网络爬虫作用:自动采集网络数据
- 网络爬虫本质:由 Python 编写的自动化程序
- 网络爬虫理解:互联网类似一张大蜘蛛网,爬虫类似蜘蛛在蛛网上循环往复爬取信息
- 网络爬虫原理:根据设定的目标 URL、URL 列表爬取并解析网络数据,直到满足要求后停止
大数据主要特征:大量(Volume)、多样(Variety)、高速(Velocity)、价值(Value),即"4V"
Python:主流的编程语言或脚本语言,又称为"万金油"语言,开发者为"吉多·范罗苏姆"即"龟叔"
URL(Uniform Resource Locator):统一资源定位符,是互联网上标准资源的地址,经它可访问对应资源
1.1.2 网络爬虫分类
通用网络爬虫、 聚焦网络爬虫、 增量网络爬虫、 深层网络爬虫
- 通用网络爬虫:爬取全网数据,又名全网爬虫
- 聚焦网络爬虫:爬取特定网页数据,节省了硬件和网络资源
- 增量网络爬虫:爬取有更新的已下载和新产生的网页的数据
- 深层网络爬虫:爬取只有用户提交一些关键词才能获取的网页数据
通用网络爬虫用途:门户网站、搜索引擎、大型网络服务提供商的数据采集
聚焦网络爬虫用途:特定领域信息有需求的场景的数据采集
通用网络爬虫用途:网页内容常更新或不断有新网页出现的网站的数据采集
通用网络爬虫用途:用户注册、用户登录的网页的数据采集
1.1.3 网络爬虫应用
网络爬虫应用一、网络爬虫应用二、网络爬虫应用三
- 网络爬虫应用一:搜索引擎
- 网络爬虫应用二:企业用户
- 网络爬虫应用三:普通用户
搜索引擎的爬虫一:Google 的 Googlebot、MircoSoft Bing 的 Bingbot 等
搜索引擎的爬虫二:Baiduspider、Baiduspider-image、Baiduspider-news 等
企业的爬虫软件有:火车头、八爪鱼、GooSeeker
1.2 网络爬虫流程
爬取网页、解析网页、存储数据
1.2.1 爬取网页
爬取网页概念、爬取网页过程、爬取网页库包
- 爬取网页概念:获取网页的源代码
- 爬取网页过程:先 HTTP 网页请求,再 HTTP 网页响应
- 爬取网页库包:urlib、requests、selenium、aiohttp 等
网页源代码类型:动态源码( ASP、PHP、JSP、.NET 等)、静态源码( HTML 等)
爬虫的网页源码:静态源代码,即主要是爬取 HTML 的 <body> </body> 中的内容
HTTP(Hyper Text Transfer Protocol):超文本传输协议,又称 " Request-Response 协议"
1.2.2 解析网页
解析网页概念、解析网页好处、解析网页方法、解析网页库包
- 解析网页概念:根据网页结构,分析网页源码,提取网页数据
- 解析网页好处:使杂乱无章的数据变清晰,以便后续分析处理
- 解析网页方法:正则表达式(万能方法)、XPath + CSS(简便方法)
- 解析网页库包:beautifulsoup4(bs4)、lxml、pyquery、tesserocr 等
正则表达式(Regular Expression):用于模式匹配和搜索文本的工具
XPath(XML Path Language):XML 路径语言,用于在 XML 文档中查找信息
CSS(Cascading Style Sheets):层叠样式表,用于设置文档的样式,是一种样式表语言
1.2.3 存储数据
存储数据概念、存储数据方式
- 存储数据概念:将提取数据保存起来,以便后续使用
- 存储数据方式:JSON 或 CSV 文件、MySQL 或 MongoDB 数据库
JSON(JavaScript Object Notation):JS对象简谱,是一种轻量级的数据交换格式
CSV(Comma-Separated Values):逗号分隔的值,是一种实用的文件格式,形似表格,类似于文本文件
MySQL:一个 DBMS(数据库管理系统),由瑞典 MySQLAB 公司开发,目前属于 Oracle(甲骨文)公司
MongoDB:一款流行的开源文档型数据库,原名来自于"Humongous"(庞大), 即可以处理大规模的数据
1.3 网络爬虫协议
网络爬虫合法性、网络爬虫 Robot 协议
1.3.1 网络爬虫合法性
网络爬虫法律起源、网路爬虫注意事项
- 网络爬虫法律起源:保护知识的产权
- 网路爬虫注意事项:不要触碰道德的底线,甚至越过法律的雷池、控制网页请求速度、尊重知识产权
爬虫法律法规:http://www.cac.gov.cn/2019-05/28/c_1124546022.htm
1.3.2 网络爬虫 Robot 协议
网络爬虫 Robot 协议概念、网络爬虫 Robot 协议作用
网络爬虫 Robot 协议位置、网络爬虫 Robot 协议访问
- 网络爬虫 Robot 协议概念:互联网中的道德规范,又称爬虫协议
- 网络爬虫 Robot 协议作用:方便爬虫用户查看网站是否支持爬取
- 网络爬虫 Robot 协议位置:存放在网站根目录下的 robots.txt 文本文件
- 网络爬虫 Robot 协议访问:根域名(网站网址)+ robots.txt,如:www.python.org/robots.txt
- 网络爬虫 Robot 协议内容:User-agent(爬虫名)、Disallow(禁止访问)、Allow(允许访问)
User-agent:若是 * ,则表示对象是所有爬虫,等价于正则表达式中的符号 * 的作用
Allow:其值为地址,且描述格式符合正则表达式(regex)的规则,可用正则表达式筛选出可访问的地址
Disallow:其值为地址,且描述格式符合正则表达式(regex)的规则,可用正则表达式筛选出不可访问的地址
1.4 网络爬虫环境
Python 包、Pycharm 软件、Ancaconda 软件
1.4.1 Python 包
Python 概念、Python 优势、Python 下载、Python 安装、Python 使用
- Python 概念:TIOBE 排行榜上常年榜首的流行的编程语言,由荷兰龟叔发明
- Python 优势:免费、简单、开源、跨平台、面向过程和对象、动态、生态良好
- Python 下载:直接在其官网下载,不要在其它网站下载,以免受到流氓软件的侵扰
- Python 安装:按照 Python 提示按部就班,但注意勾选 "Add Python X.xx to path" 选项
- Python 使用:打开内置简易集成开发环境 IDLE,可用交互式模式或脚本式模式编写 Python 代码
TIOBE:全世界的编程语言排行榜,通过它可知道某一编程语言的火热程度
龟叔:真名"吉多·范罗苏姆",其著名话语有"Life is short, you need python!"
开源:最初指开源软件(OSS),开源软件指可任意获取、查看、修改其源代码,著名组织有 Apache(ASF)
跨平台:"Wirte once,run any where",即超强的可移植性,三大主流平台有 Windows、Linux、Mac OS
面向对象编程(OOP):一切事物都抽象成对象处理,其三大特性有继承、封装、多态,代表有 Java、C++
面向过程编程(Procedure Oriented Programming):一切以过程为中心,即问题的解决必须指明相应步骤
动态:在运行时确定数据类型,变量使用前不需要类型声明,如:Python,相应的有静态语言,如:Java
"Add Python X.xx to path" 选项:帮助 Windows 自动设置 Python 系统环境变量,以便后续的使用
集成开发环境(Integrated Development Environment):简称 IDE,用于进行各种程序的开发
IDLE:Python 安装时自带的编辑器,拥有 Python 基本编程环境,相当于简易 IDE,适用于简短的代码验证
1.4.2 Pycharm 软件
Pycharm 概念、Pycharm 优势、Pycharm 下载、Pycharm 安装、Pycharm 使用
- Pycharm 概念:JetBrains 公司著名的 Python IDE,用于专业 Python 开发
- Pycharm 优势:便于编写、调试、运行 Python 代码、众多插件实现强大的扩展
- Pycharm 下载:直接在其官网下载,不要在其它网站下载,以免流氓软件的侵扰
- Pycharm 安装:按照 Pycharm 软件提示安装即可,即"傻瓜式安装",但路径不能有空格和中文
- Pycharm 使用:首次使用需先配置 Python 解释器,再创建 Python 工程,最后创建 Python 文件
JetBrains:一家位于捷克的布拉格的软件开发公司,旗下有许多优秀的各种编程语言的 IDE,如:IDEA
Python 解释器:用于把 Python 语言翻译成计算机 CPU(中央处理器)能理解的机器指令,相当于翻译官
1.4.3 Ancaconda 软件
Ancaconda 概念、Ancaconda 优势、Ancaconda 下载、Ancaconda 安装、Ancaconda 使用
- Ancaconda 概念:Python 科学计算发行版,即内置 Python 和众多三方库
- Ancaconda 优势:便于管理 Python 工程环境、避免重复下载常用的三方包
- Ancaconda 下载:直接在其官网下载,但因它是国外网站,所以下载的速度慢
- Ancaconda 安装:按照 Anaconda 软件提示安装即可,即"傻瓜式的安装方式"
- Ancaconda 使用:打开 Anaconda 后可创建专属 Python 工程环境,同时可使用 conda 环境
Python 科学计算发行版:Python(x,y)、WinPython、Anaconda、Enthought Canopy
Conda:适用于任何语言的软件包、依赖项和环境管理系统,包括 Python、R、Ruby、Lua、Scala、Java、C
二、网络爬虫基础
贪多不化,应该把理论应用于实践中,而不是一直只是表面上的感动自己 -- CF.FC
2.1 HTTP
HTTP 协议、HTTP 请求、HTTP 响应
2.1.1 HTTP 协议
HTTP 协议概念、HTTP 协议过程、HTTP 协议操作
- HTTP 协议概念:超文本传输协议,主要涉及 Request(请求)、Response(响应)【三握四挥】
- HTTP 协议过程:输入 URL -> 发送请求 -> 解析和处理请求 -> 返回响应 -> 解析响应 -> 呈现内容
- HTTP 协议操作:打开网页 -> 鼠标右键 -> 检查选项 -> 网络选项(若无请求,需要重新刷新页面)
上述 HTTP 协议操作是以 Windows 的 Edge 为例,其它主流浏览器,如:Google 的 Chrome 的操作类似
2.1.2 HTTP 请求
请求网址、请求方法、请求头、请求体
- 请求网址(Request URL):用来唯一确定请求的资源
- 请求方法(Request Method):常见的 GET 方法、POST 方法
- 请求头(Request Headers):编写爬虫程序时多数需设定请求头,不同请求的请求头包含内容不同
- 请求体(Request Body):POST 请求的请求体是表单数据,GET 请求的请求体为空
URL构成:<协议>://<用户名>:<密码>@<主机域名或者ip地址>:<端口号>/<路径>;<参数>?<查询>#<片段>
请求方法:GET、POST、HEAD、PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH
GET、POST 区别:GET 大小为 1KB 且 URL 含参数及速度快、POST 大小无限制且 URL 不含参数及速度慢
get 请求一般不需要设置 Content-Type,只有 post 才有必要设置
请求头的内容类型(Content-Type):键值对(Key-Value)、图片、文本、应用程序、多部分
2.1.3 HTTP 响应
响应状态码(Response Status Code)、响应头(Response Headers)、响应体(Response Body)
- 响应状态码(Response Status Code):表示服务器的响应状态,根据它来判断是否请求是否响应
- 响应头(Response Headers):包含了服务器对请求的应答信息
- 响应体(Response Body):包含响应的正文数据
信息响应 (100–199)
成功响应 (200–299)
重定向消息 (300–399)
客户端错误响应 (400–499)
服务端错误响应 (500–599)
请求网页时响应体是网页的网页源代码,请求图片时响应体是图片的二进制数据
2.2 urllib
urllib 简介、urllib request 请求模块
2.2.1 urllib 简介
urllib 概念、urllib 设计理念
- urllib 概念:urllib 库是 Python 内置标准库,无需额外安装即可使用,总共有四个模块
- urllib 设计理念:urllib 库的设计理念为先请求->再解析robts文件->再解析网页源码->终处理异常
模块一:parse 用于解析、拆分、合并 URL
模块二:request 用于模拟发送 HTTP 请求
模块三:error 用于处理 HTTP 请求错误时的异常
模块四:robotparser 用于解析网站的 robots.txt 文件
2.2.2 urllib request 请求模块
request 请求模块构成、request 请求模块作用
- request 请求模块构成:urlopen() 函数 + Request() 类 + ...
- request 请求模块作用:提供基本的构造 HTTP 请求的方法,同时还可处理授权验证、重定向、Cookie
urlopen() 函数作用:用来构造基本的 HTTP 请求
Request() 类作用:用来处理 HTTP 较复杂的请求信息
Python Spider 代码仓库
即使学习了很久也一无所有,但不乏重来的勇气和信心,而过程的精彩也是极其绚烂的 -- CF.FC
一、
Python Spider 资源分享
只有在不断地刻苦专研中才能真正地体会到知识的广博 -- CF.FC