史上最详细Python爬虫基础教学(一)

一、前言

首先,我也是个爬虫小白,也在努力的学习中,当然,接触python也不只是为了去学爬虫,数据分析啊,机器学习和深度学习啊,都是我努力的目标。我开始写这个爬虫教程也是想和我一样想学好爬虫的小白在边自己去写教程的同时可以去温习一下旧知识,更能够在学习新知识的时候加深印象,我会在以后将自己学到的经验和笔记都在这里分享给大家。还有就是此教学只针对有python基础的,还没接触过的可以先去学一下python,所以在这里python的安装和环境配置我就不详细讲述了哦。(本教学适用于python3版本)

二、爬虫简介

2.1 什么是爬虫

网络爬虫又叫网页蜘蛛,或者是网络机器人,如果把互联网看做成很大一张网,那么爬虫就是在这张网上行走的蜘蛛。如果把网的节点看做网页,那当蜘蛛爬到某个节点的时候,就相当于访问了该网页,获取了信息,而蜘蛛顺着节点之间连线到达另一个节点就是通过网页间的链接关系去获取另一个网页的信息,当蜘蛛将整个节点爬完,那就获取到整个网站的数据了。通俗来讲爬虫就是获取网页信息写的程序。
在这里插入图片描述

2.2 基本的爬虫流程

1.发起请求、获取响应
首先我们要利用python的请求库模拟游览器对目标网络的服务器发送HTTP请求,然后获取到响应信息,一般获取的响应体是源代码。我们常用的请求库便是urllib和requests等,我们可以利用这些库来实现HTTP请求操作。
2.解析数据
当我们获取到源代码后,就要进行分析,这个解析过程也可以称作数据清洗。因为我们获取到源代码后,会有很多多余的HTML属性标签,我们要把这些多余的东西给清洗掉,才能得到我们想要的数据。最普遍的方法就是利用正则表达式提取,但考虑到正则的复杂性,很容易出错,并且有些网页的特殊结构,我们需要根据节点位置以及属性标签使用其他库进行提取,最常见的有xpath、beautifulsoup等等。总的来说,解析数据并提取信息是爬虫中最重要的部分,它有利于我们对数据的后继处理和分析。
3.保存数据
提取到信息后我们需要保存下来,当然,获取的数据不一样,保存格式也不一样,我们可以保存成文本或json格式,也可保存图片JPG,pnd。或者保存MP4等格式的文件,还以将数据保存到数据库中。总之,根据自己的目的和数据类型保存成相应的格式。

在这里插入图片描述

2.3 爬虫的分类

网络爬虫根据爬取数量、结构及实现技术大致分为两种:通用爬虫和聚焦爬虫。
1.通用爬虫
通用网络爬虫又称全网爬虫(Scalable Web Crawler),爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。 由于商业原因,它们的技术细节很少公布出来。 这类网络爬虫的爬行范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求相对较低,同时由于待刷新的页面太多,通常采用并行工作方式,但需要较长时间才能刷新一次页面。 虽然存在一定缺陷,通用网络爬虫适用于为搜索引擎搜索广泛的主题,有较强的应用价值。通用网络爬虫的结构大致可以分为页面爬行模块 、页面分析模块、链接过滤模块、页面数据库、URL 队列、初始 URL 集合几个部分。
2.聚焦爬虫
聚焦网络爬虫(Focused Crawler),又称主题网络爬虫(Topical Crawler),是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫。 和通用网络爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求。聚焦网络爬虫和通用网络爬虫相比,增加了链接评价模块以及内容评价模块。聚焦爬虫爬行策略实现的关键是评价页面内容和链接的重要性,不同的方法计算出的重要性不同,由此导致链接的访问顺序也不同。

2.4 robots协议

robots协议,也称为爬虫协议,机器人协议等,一般网站都会通过该协议告诉搜索引擎哪些页面可以爬取或不可以爬取。为了知道网站的robot协议我们一般可以在我们在要爬取网站url后面加上robots.txt。具体意思可以参照百度百科robots协议

在这里插入图片描述

三、网站基础

3.1 HTTP和HTTPS

1.HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
2.HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。
当我们进行爬虫的时候会将HTTPS中的S给去掉,是为了避免我们在获取数据的时候信息不会缺失,也是为了避免因为证书认证的问题而导致请求失败。

3.2 URL

URL(Uniform Resource Locator),叫做统一资源定位符,它是WWW得统一资源定位标志,也就是网络地址。一般是由四部分组成:协议、主机、端口、路径。一般的语法格式为:

protocol:// hostname[:port] / path / [;parameters][?query]#anchor

protocol(协议)
指定使用的传输协议,下表列出 protocol 属性的有效方案名称。 最常用的是HTTP协议,它也是WWW中应用最广的协议。
file 资源是本地计算机上的文件。格式file:///,注意后边应是三个斜杠。
ftp 通过 FTP访问资源。格式 FTP://
gopher 通过 Gopher 协议访问该资源。
http 通过 HTTP 访问该资源。 格式 HTTP://
https 通过安全的 HTTPS 访问该资源。 格式 HTTPS://

hostname(主机名)
是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(username:password@hostname)

port(端口号)
如http的默认端口为80。如果输入时省略,则使用默认端口号。

path(路径)
由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。

parameters(参数)
这是用于指定特殊参数的可选项。

query(查询)
可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP。NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。

anchor:锚点,后台一般不用管,前端用来做页面定位的

在浏览器中请求一个url,浏览器会对这个url进行一个编码。除英文字母,数字和部分符号外,其他的全部使用百分号+十六进制码值进行编码

3.3 请求和响应

爬虫中常用的请求方法:get和post方法。
get和post请求方法区别:

  • get请求参数和数据都能在URL中看到,而post请求的URL不会包含这些数据,数据都是通过表单形式传输,会包含在请求体中。
  • get请求有长度限制,仅用于请求数据,而post请求长度没有限制。
    其他请求方法:
    HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
    POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    PUT:从客户端向服务器传送的数据取代指定的文档的内容。
    DELETE:请求服务器删除指定的页面。
    CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
    OPTIONS:允许客户端查看服务器的性能。
    TRACE:回显服务器收到的请求,主要用于测试或诊断。

响应状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。 下面是常见的HTTP状态码:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

HTTP状态码的分类
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

  • 1** 信息,服务器收到请求,需要请求者继续执行操作
  • 2** 成功,操作被成功接收并处理
  • 3** 重定向,需要进一步的操作以完成请求
  • 4** 客户端错误,请求包含语法错误或无法完成请求
  • 5** 服务器错误,服务器在处理请求的过程中发生了

请求头与响应头信息具体可参照HTTT头信息总结

3.4 网页基础

网页是构成网站的基本元素,是承载各种网站应用的平台。通俗地说,网站就是由网页组成的。网页是一个包含HTML标签的纯文本文件,它可以存放在世界某个角落的某一台计算机中,是万维网中的一“页”,是超文本标记语言格式(标准通用标记语言的一个应用,文件扩展名为.html或.htm)。网页通常用图像档来提供图画。网页要通过网页浏览器来阅读。
1.HTML
HTML称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
一般当我们打开网站按下f12键,打开开发者模式,这时在Elements选项卡中看到的网页源代码就是HTML。
在这里插入图片描述

HTML标签

HTML标签标记标签通常被称为 HTML 标签 (HTML tag)。
HTML 标签是由尖括号包围的关键词,比如
HTML 标签通常是成对出现的,比如
标签对中的第一个标签是开始标签,第二个标签是结束标签
开始和结束标签也被称为开放标签和闭合标签开始和结束标签也被称为开放标签和闭合标签

HTML 文档 = 网页

HTML 文档描述网页
HTML 文档包含 HTML 标签和纯文本
HTML 文档也被称为网页
Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容:

<html>
<body>
<h1>Hello World</h1> 
<p>this is html</p>
</body> 
</html>

在这里插入图片描述
这时一个简单的HTML实例,大家有兴趣可以用记事本编辑以后保存为html格式运行。

<html></html> 之间的文本描述网页
<body></body> 之间的文本是可见的页面内容
<h1></h1> 之间的文本被显示为标题
<p></p> 之间的文本被显示为段落

2.CSS
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。

选择器
类型选择器
CSS中的一种选择器是元素类型的名称。使用这种选择器(称为类型选择器),可以向这种元素类型的每个实例上应用声明。例如,以下简单规则的选择器是H1,因此规则作用于文档中所有的H1元素:

简单属性选择器
CLASS属性
CLASS属性允许向一组在CLASS属性上具有相同值的元素应用声明。BODY内的所有元素都有CLASS属性。从本质上讲,可以使用CLASS属性来分类元素,在样式表中创建规则来引用CLASS属性的值,然后浏览器自动将这些属性应用到该组元素。

类选择器以标志符(句点)开头,用于指示后面是哪种类型的选择器。对于类选择器,之所以选择句点是因为在很多编程语言中它与术语“类”相关联。翻译成英语,标志符表示“带有类名的元素”。

ID属性
ID属性的操作类似于CLASS属性,但有一点重要的不同之处:ID属性的值在整篇文档中必须是唯一的。这使得ID属性可用于设置单个元素的样式规则。包含ID属性的选择器称为ID选择器。
需要注意的是,ID选择器的标志符是散列符号(#)。标志符用来提醒浏览器接下来出现的是ID值。

STYLE属性
尽管在选择器中可以使用CLASS和ID属性值,STYLE属性实际上可以替代整个选择器机制。不是只具有一个能够在选择器中引用的值(这正是ID和CLASS具有的值),STYLE属性的值实际上是一个或多个CSS声明。
通常情况下,使用CSS,设计者将把所有的样式规则置于一个样式表中,该样式表位于文档顶部的STYLE元素内(或在外部进行链接)。但是,使用STYLE属性能够绕过样式表将声明直接放置到文档的开始标记中。

组合选择器类型
可以将类型选择器、ID选择器和类选择器组合成不同的选择器类型来构成更复杂的选择器。通过组合选择器,可以更加精确地处理希望赋予某种表示的元素。例如,要组合类型选择器和类选择器,一个元素必须满足两个要求:它必须是正确的类型和正确的类以便使样式规则可以作用于它。

外部信息:伪类和伪元素
在CSS1中,样式通常是基于在HTML源代码中出现的标记和属性。对于很多设计情景而言这种做法完全可行,但是它无法实现设计者希望获得的一些常见的设计效果。
设计伪类和伪元素可以实现其中的一些效果。这两种机制扩充了CSS的表现能力。在CSS1中,使用伪类可以根据一些情况改变文档中链接的样式,如根据链接是否被访问,何时被访问以及用户和文档的交互方式来应用改变。借助于伪元素,可以更改元素的第一个字母和第一行的样式,或者添加源文档中没有出现过的元素。
伪类和伪元素都不存在于HTML;也就是说,它们在HTML代码中是不可见的。这两种机制都得到了精心设计以便能够在CSS以后的版本中做进一步地扩充;也就是说实现更多的效果。

说到底CSS是规定网页的布局,想深入了解的大家可以自行搜索。

3.JavaScript
有时候,我 在用urllib或requests抓取网页时,得到的源代码实际和浏览器中看到的不一样,这是个非常常见的问题,现在网页越来越多地采用 Ajax 、前端模块化工具来构建,整个网页能都是由 JavaScript 渲染出来的,也就是说原始的 HTML 代码就是一个空壳, 例如:

< ! OOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8>
<title>This is a Oemo</title> 
</head> 
<body> 
<div id=”container” >
</div> 
</body> 
<script src=” app.js”></script> 
</html> 

body 节点里面只有 id container 的节点,但是需要注意在 body 节点后引入了 app.js,它便负责整个网站的渲染
在浏览器中打开这个页面时,首先会加载这个 HTML 容,接着浏览器会发现其中引人了app.js 文件,然后便会接着去请求这个文件,获取到该文件后,便会执行其中的 JavaScript 代码,而JavaScript 会改变 HTML 巾的节点,向其添加内容,最后得到完整的页面但是在用urllib或requests等库请求当前页面时,我们得到的只是这个 HTML 码,它不会帮助我们去继续加载这个 JavaScript 文件,这样也就看不到浏览器中的内容了,这也解释了为什么有时我们得到的源代码和浏览器中看到的不一样。

4.静态网页和动态网页
静态网页
在网站设计中,纯粹HTML(标准通用标记语言下的一个应用)格式的网页通常被称为“静态网页”,静态网页是标准的HTML文件,它的文件扩展是.htm、.html,可以包含文本、图像、声音、FLASH动画、客户端脚本和ActiveX控件及JAVA小程序等。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。静态网页是相对于动态网页而言,是指没有后台数据库、不含程序和不可交互的网页。静态网页相对更新起来比较麻烦,适用于一般更新较少的展示型网站。容易误解的是静态页面都是htm这类页面,实际上静态也不是完全静态,他也可以出现各种动态的效果,如GIF格式的动画、FLASH、滚动字幕等。

特点
1.静态网页每个网页都有一个固定的URL,且网页URL以.htm、.html、.shtml等常见形式为后缀,而不含有“?”;(动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索蜘蛛不去抓取网址中“?”后面的内容。)
2.网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件;
3.静态网页的内容相对稳定,因此容易被搜索引擎检索;
4.静态网页没有数据库的支持,在网站制作和维护方面工作量较大。

动态网页
所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
值得强调的是,不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。
总之,动态网页是基本的html语法规范与Java、VB、VC等高级程序设计语言、数据库编程等多种技术的融合,以期实现对网站内容和风格的高效、动态和交互式的管理。因此,从这个意义上来讲,凡是结合了HTML以外的高级程序设计语言和数据库技术进行的网页编程技术生成的网页都是动态网页。

常用的4种动态网页技术编辑
1、PHP 即Hypertext Preprocessor(超文本预处理器),它是当今Internet上最为火热的脚本语言,其语法借鉴了C、Java、PERL等语言,但只需要很少的编程知识你就能使用PHP建立一个真正交互的Web站点。
它与HTML语言具有非常好的兼容性,使用者可以直接在脚本代码中加入HTML标签,或者在HTML标签中加入脚本代码从而更好地实现页面控制。PHP提供了标准的数据库接口,数据库连接方便,兼容性强;扩展性强;可以进行面向对象编程。

2、ASP 即Active Server Pages(活跃服务器页),它是微软开发的一种类似超文本标识语言(HTML)、脚本(Script)与CGI(公用网关接口)的结合体,它没有提供自己专门的编程语言,而是允许用户使用许多已有的脚本语言编写ASP的应用程序。ASP的程序编制比HTML更方便且更有灵活性。它是在Web服务器端运行,运行后再将运行结果以HTML格式传送至客户端的浏览器。因此ASP与一般的脚本语言相比,要安全得多。
ASP的最大好处是可以包含HTML标签,也可以直接存取数据库及使用无限扩充的ActiveX控件,因此在程序编制上要比HTML方便而且更富有灵活性。通过使用ASP的组件和对象技术,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能。
ASP技术也非完美无缺,由于它基本上是局限于微软的操作系统平台之上,主要工作环境是微软的IIS应用程序结构,又因ActiveX对象具有平台特性,所以ASP技术不能很容易地实现在跨平台Web服务器上工作。
aspx是微软的在服务器端运行的动态网页文件,通过IIS解析执行后可以得到动态页面,是微软推出的一种新的网络编程方法,而不是asp的简单升级,因为它的编程方法和asp有很大的不同,他是在服务器端靠服务器编译执行的程序代码, ASP 使用脚本语言,每次请求的时候,服务器调用脚本解析引擎来解析执行其中的程序代码,而asp.net 则可以使用多种语言编写,而且是全编译执行的,比ASP 快,而且,不仅仅是快的问题,有很多优点。

3、JSP 即Java Server Pages(爪哇服务器页面),它是由Sun Microsystem公司于1999年6月推出的新技术,是基于Java Servlet以及整个Java(爪哇)体系的Web开发技术。 JSP和ASP在技术方面有许多相似之处,不过两者来源于不同的技术规范组织,以至 ASP一般只应用于Windows NT/2000平台,而JSP则可以在85%以上的服务器上运行,而且基于JSP技术的应用程序比基于ASP的应用程序易于维护和管理,所以被许多人认为是未来最有发展前途的动态网站技术。

4、CGI(Common Gateway Interface,公用网关接口)是较早用来建立动态网页的技术。当客户端向Web服务器上指定的CGI程序发出请求时,Web服务器会启动一个新的进程执行某些CGI程序,程序执行后将结果以网页的形式再发送回客户端。
  CGI的优点是它可以用很多语言编写,如 C 、C++ 、VB和Perl语言。在语言的选择上有很大的灵活性。最常用的CGI开发语言为Perl。

本章主要介绍了爬虫的基本知识,概述有些笼统,缺乏实际操作,下章我们将开始正式的爬虫入门教程。有些简陋,大佬轻喷。

参考:HTML/ CSS教程
Python3网络爬虫开发实战

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值