Python爬虫学习(一)——爬虫基础

目录

一、HTTP原理:

        1. URI和URL:

        2. 超文本(hypertext):

        3. HTTP和HTTPS:

        4. HTTP的请求过程:

        5. 请求:

        6. 响应:

二、网页基础知识:

        1. 网页的组成:

        2. 网页的结构

        3. 节点树与节点间的关系

        4. 选择器

三、爬虫基本原理:

        1. 爬虫概述

        2. 能抓怎样的数据

四、会话和Cookies:

        1. 静态网页和动态网页

        2. 无状态HTTP

五、代理的基本原理:

        1. 基本原理:

        2. 代理的作用:

        3. 爬虫代理:

        4. 代理分类:

        5. 常见代理设置


一、HTTP原理:

1. URI和URL:

  • URI(Uniform Resource Identifier,即统一资源标志符)

  • URL**(Uniform Resource Locator,即统一资源定位符)

    • http://github.com/favicon.ico 是一个URL,也是一个URI;即有这样的一个图标资源,我们通过URI/URL来唯一指定了其访问方式,其中包括:

      • 访问协议http

      • 访问路径(即根目录)

      • 资源名称favicon.ico

  • URL是URI的子集,那么如何判定URI不是URL呢?URI有一个子类叫URN(Uniform Resource Name),URN只命名资源而不指定如何定位资源,URI、URL、URN的关系如图,但是在目前的互联网中,几乎所有的的URI都是URL

2. 超文本(hypertext):

        在浏览器中看到的网页就是超文本解析之后的结果,其网页源码是一系列HTML代码,里面包含一系列标签。一般的我们认为网页源码HTML就可以称为超文本

3. HTTP和HTTPS:

        我们可以看到在淘宝的网址信息中:淘宝网 - 淘!我喜欢icon-default.png?t=M0H8https://www.taobao.com/        URL开头会有https或http,这些都是访问资源需要的协议类型,有时我们还会看到ftp、sftp、smb开头的URL,这些都是协议类型,爬虫中常用的是HTTP和HTTPS,下面我们了解一下这两个协议的含义。

HTTP:其全称为Hyper Text Transfer Protocol,即超文本传送协议,是保证高效准确传输超文本文档的协议。

HTTPS:其全称为Hyper Text Transfer Protocol over Secure Socket Layer ,简单的讲就是HTTP的安全版,即HTTP下加入SSL层。

        HTTPS的安全基础是SSL,其内容都是经过SSL加密的,其主要作用就是:建立一个安全信息同东来保证数据传输的安全;确认网址的真实性。某些网站虽然使用了HTTPS协议,但是仍然会被提示不安全,这是因为其CA证书不是CA机构签发的并不受CA机构信任,实际上其数据传输仍然是经过SSL加密的。此时如果要爬取这类网页上的信息就需要设置证书忽略。

4. HTTP的请求过程:

        我们在浏览器中输入一个URL,回车就可以在浏览器中看到页面内容。实际上,浏览器首先向网站服务器发送了一个请求,网站服务器收到请求后进行处理和解析,如何返回对应的响应,接着传回浏览器。响应中包含了页面源码等内容。浏览器对其进行解析后将页面呈现出来。

        我们打开浏览器,右击并选择“检查”项,即可打开浏览器开发者工具。如何访问需要访问的页面,可以点击Network观察这个过程中发生了怎样的网络请求。

  • 点击“Headers”可以看到更详细的内容:

  • General:Request URL为请求的URL,Request Method 为请求的方法,Status Code为响应状态码,Remote Adress为远程服务器的地址和端口,Referer Policy为Referer判别策略

  • Response Header:响应头。包含服务器类型、文档类型、日期等等信息,是响应的一部分

  • Request Header:请求头。包含浏览器标识、Cookies、Host等等信息,是请求的一部分

5. 请求:

        由客户端向服务端发出,一般分为四部分内容:Request Method、Request URL、Request Headers、Request Body

Request Method:

常见方法有GET和POST。

  • GET:在浏览器中直接输入URL并回车,就是发起了一个GET请求,请求的参数会直接包到URL里。例如,在百度中搜索Python,就是一个GET请求,链接为:Python_百度搜索,该URL包含了请求的参数信息,参数wd表示搜索的关键字。

  • POST:POST请求大多在表单提交时发起,尤其是需要输入用户名和密码等敏感信息时,其数据也会以表单的形式传输并不会体现在URL中。

  • 区别GET和POST方法:

    • GET请求中的参数都包含在URL中,且请求提交的数据最多只有1024字节

    • POST请求的URL中不包含GET请求中的参数,数据都通过表单的形式传输,且POST请求提交的数据大小没有限制

Request URL:

Request Headers:

        请求头,用来说明服务器要使用的附加信息,是请求的重要组成部分,在写爬虫时大部分情况下都需要设定请求头。比较重要的有:Cookies、Referer、User-Agent,下面说明一些常用的头信息:

  • Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。现在的请求必须包含此内容

  • Cookies:网站为了辨别用户进行会话跟踪而存储在用户本地的数据。其主要功能为:维持当前访问会话。例如,我们输入用户名和密码成功登录某网站后,服务器会保存登录信息,在退出登录前我们刷新或请求该站点其他页面时都会是保持登录状态。

  • Referer:用此内容来标识这个请求是哪个页面发送过来的,服务器能够拿到这一信息并做相应的处理,如:源统计、防盗链处理

  • User-Agent:简称UA,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息可以伪装浏览器,如不加很可能被识别出为爬虫。

Request Body:

        一般请求体承载的内容是POST请求中的表单信息,而对于GET请求,请求体则为空

6. 响应:

        响应,有服务端返回给客户端,可分为三个部分:Response Status Code、Response Headers、Response Body

Response Status Code:

        状态响应码表示服务器的响应状态,200表示服务器正常响应,404表示页面未找到,403表示服务器拒绝此请求,302表示临时移动,500表示服务器内部发送错误

Response Headers:

        响应头包含服务器对请求的应答信息,如:Content-Type、Server、Set-Cookies等等。具体内容可查看:超详细教程:什么是HTTP请求头/响应头 - 知乎 (zhihu.com)

Response Body:

        响应的正文数据都在响应体中。做爬虫时,要解析的内容就是响应体。同样的我们也主要通过响应体来获取网页源码、JSON数据等

二、网页基础知识:

1. 网页的组成:

        网页可以分为三大部分——HTML、CSS和JavaScript。HTML相当于骨架,JavaScript相当于肌肉,CSS相当于皮肤。HTML定义了网页的结构,CSS描述了网页的布局,Javascript定义了网页的行为

(1)HTML:全称为:Hype Text Markup Language,即超文本标记语言。

        网页包含文字、按钮、图片、视频等各种复杂的元素,而HTML则用不同类型标签来分别表示。图片用img来表示,视频用video来表示,段落用p标签来表示,它们之间的布局有偿通过布局标签div嵌套组合而成。

        整个网页就是由标签嵌套组合而成的,这些标签定义的节点元素相互嵌套和组合形成了复杂的层次关系,就形成了网页架构

(2)CSS:全称为:Cascading Style Sheets,即层叠样式表。

        为了让网页更加美观,借助了CSS。“层叠”:当HTML中引用了数个样式文件,并且样式发送冲突时,浏览器能够依据层叠顺序处理。“样式”:网页中文字大小、颜色、元素间距、排列等格式。CSS是当前的唯一的网页页面排版样式标准。网页中,一般会统一定义整个网页的样式规则,并写入CSS文件中(后缀为css)。在HTML中,只需用link标签即可引入写好的CSS文件,从而使得页面美观。

#head_wrapper.s-ps-islite.s-p-top{   #大括号前面是一个选择器,大括号内指定了样式规则
​
position:absolution;    #该元素的布局方式为绝对布局
​
bottom:40px;    #元素下边距为40像素
​
width:100%;     #宽度为100%占满父元素
​
height:181px;   #指定了元素的高度
​
}

(3)JavaScript:

        简称JS,网页中的动画和交互效果都是依靠Javascript,它使得用户和信息之间是一种实时的、动态的、交互的页面功能Javascript通常是以单独的文件形式加载的,后缀为js,在HTML中通过script标签即可引入。

2. 网页的结构

        一个网页的标准形式是html标签内嵌套head和body标签,head内定义网页的配置的引用,body定义网页的正文

3. 节点树与节点间的关系

        在HTML中,所有标签定义的内容都是节点,它们构成了一个HTML DOM树。

        DOM树,DOM是W3C的标准,其全称为Document Object Model,即文档对象模型,定义了访问HTML和XML文档标准。它是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。

  • 核心DOM:针对任何结构化的文档的标准模型

  • XML DOM:针对XML文档的标准模型

  • HTML DOM:针对HTML文档的标准模型

根据该标准,HTML文档中的所有内容都是节点:

  • 整个文档是一个文档节点

  • 每个HTML元素是元素节点

  • HTML元素内的文本是文本节点

  • 每个HTML属性是属性节点

  • 注释是注释节点

        HTML DOM将HTML文档视作树结构,这种结构称为节点树。通过HTML DOM,树中所有节点都可以通过Javascript访问,所有HTML节点元素均可被修改、创建或删除。节点树有层级关系,父(parent)、子(child)、兄弟(sibling)等来描述节点间关系。

4. 选择器

在CSS中我们根据CSS选择器来定位节点。常见的有三种表示方法:

  • 根据id选择:#container,#开头表示选择id,其后紧跟id的名称

  • 根据class选择:.wrapper,(.)开头表示选择class,其后紧跟class的名称

  • 根据标签名选择:例如想选择二级标题,则直接用h2即可

        CSS选择器还支持嵌套选择,各选择器之间加上空格分开便可以代表嵌套关系。例如:#container .wrapper p ,表示先选择id为container 的节点,然后选择其内部为wrapper的节点,然后再进一步选择其中的p节点

三、爬虫基本原理:

获取网页并提取和保存信息的自动化程序

1. 爬虫概述

(1)获取网页:爬虫的首要工作就是获取网页源码

(2)提取信息:获取网页源码之后,接下来就是分析网页源码并从中提取我们想要的数据。最通用的方法就是采用正则表达式提取(但 正则表达式容易出错)。因为网页有一定的结构规则,因此有根据网页节点属性、CSS选择器或XPath来提取网页信息 的库。

(3)保存数据:我们一般将提取得到的数据保存到某处以便以后使用。这里保存形式多样,可以简单保存为TXT文本或JSON文本,也可 以保存到数据库MySQL和MongoDB

(4)自动化程序:爬虫程序就是代替人工进行信息搜集的自动化工具

2. 能抓怎样的数据

        网页源码、JSON字符串、各种二进制数据、各种拓展名文件等等,这些内容都有各自对应的URL,是基于HTTP或HTTPS协议的,只要是这种数据,爬虫就可以抓取。

四、会话和Cookies:

1. 静态网页和动态网页

(1)静态网页:

        静态网页的内容是由HTML代码编写的,文字、图片等内容都通过写好的HTML代码来指定,这就是静态网页。静态网页的优点是加载速度快、编写简单,但也有极大的缺陷,如可维护性差、不能根据URL灵活多变地显示内容

(2)动态网页:

        动态网页与静态网页相反,它可以动态解析URL中参数的变化,关联数据库并呈现不同的内容,现在大多数网页都是动态网页。动态网页可以不只由HTML来编写,可以由JSP、PHP、Python等语言来编写。动态网页可以实现用户的登录和注册。

2. 无状态HTTP

        HTTP的无状态指的是HTTP协议对于事务处理是没有记忆能力的,即服务器不知道客户端是什么状态。这就导致如果后续需要处理前面的信息,就必须要重传,而这就需要额外传递一些前面重复的请求。此时,会话和Cookies就应运而生。会话在服务端,用来保存用户的会话信息Cookies在客户端,浏览器下次访问网页时会自动附带上它发送给服务器,服务器通过识别Cookies并鉴定出是哪个用户,然后判断用户登录状态,然后返回对应的响应即可。

        可以简单的理解为:Cookies里面保存了登录的凭证,只需在下一次请求携带Cookies发送请求而不必重新输入用户名、密码等信息了。

(1)会话:

        会话,其本义为有始有终的一系列动作/消息。在Web中,会话对象用来存储特定用户会话所需的属性及其配置信息,

(2)Cookies:

        Cookies是指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。

  • 会话维持:

        客户端第一次请求服务器的时候,服务器会返回一个请求头中带有Set-Cookies字段的响应给客户端(用来标记是哪个用户),客户端会把Cookies保存下来。当浏览器下一次再请求该网站时,浏览器就会把这个Cookies放到请求头中一起交给服务器,服务器通过解析Cookies来找到对应的会话,然后根据会话来判断用户的状态。

        成功登录某个网站时,服务器会告诉客户端设置哪些Cookies内容,在后续访问页面时客户端会把Cookies发生过服务器,服务器找到对应的会话并加以判断,如果会话中设置登录状态的变量是有效的,则证明用户处于登录状态,否则就不能继续访问网页,需要重新登录。

  • 属性结构:

        在浏览器开发者工具打开Application选项卡,左侧有一个Storage部分,点击Cookies。会有很多属性,具体可以查看:cookie(储存在用户本地终端上的数据)_百度百科

  • 会话Cookies和持久Cookies:

        会话Cookies:把Cookies放在浏览器内存里面,浏览器关闭之后该Cookies即失效

        持久Cookies:把Cookies保存到客户端硬盘中,下次还可以继续使用,用于长久保持用户态

  • 常见误区:关闭浏览器,会话消失。之所以有这样的误解,正是因为大多数浏览器都采用了会话Cookies,关闭浏览器的同时删除了Cookies,因此下一次打开网页时需要重新登录;但是,服务器并没有删除会话,会话并没有消失。

五、代理的基本原理:

        在做爬虫的时候会遇到这样的情况:最初爬虫运行良好,但是很快就会被提示“您的IP访问频率太高”。这是因为网站做了反爬虫机制。服务器会检测某个IP在单位时间内的请求次数,如果超过阈值就会封IP。

        解决这个问题的一种有效的方式就是代理。

1. 基本原理:

        代理实际上指的是代理服务器(proxy server),其功能就是代理网络用户取得网络信息。正常情况下,我们请求一个网站是将请求发送给了服务器,然后服务器把响应传回给我们。如果设置了代理服务器,就是在本机和服务器之间搭建了一个桥,此时请求网站时是将请求发给代理服务器,然后由代理服务器发送给web服务器,接着由代理服务器把Web服务器的响应转发给本机。这样web服务器识别出来的真实IP就不再是我们本机的IP了,成功实现IP的伪装。

2. 代理的作用:

  • 突破自身IP访问限制,访问平时不能访问站点;

  • 访问一些单位或团体的内部资源

  • 提高访问速度:通常代理服务器都设置有一个大的硬盘缓冲区,当有外部信息通过时,同时也将其保存到缓存区,当其他用户再访问相同信息时则直接从硬盘缓冲区中直接读出。提供访问速度。

  • 隐藏真实IP

3. 爬虫代理:

        在爬取过程中不断更换代理,就可以避免被封IP,从而达到很好的爬取效果。

4. 代理分类:

根据协议区分:

  • FTP代理服务器:主要用于访问FTP服务器,一般有上传、下载和缓存的功能,端口一般为21、2121等

  • HTTP代理服务器:主要用于访问网页,一般有内容过滤和缓存的功能,端口一般为80、8080、3128等

  • SSL/TLS代理:主要用于访问加密网站,一般有SSL或者TLS加密功能,端口一般为443

  • RTSP代理:主要用于访问Real流媒体服务器,一般有缓存功能,端口一般为554

  • Telnet代理:主要用于telnet远程控制(黑客入侵时常用于隐藏身份),端口一般为23

  • POP3/SMTP代理:主要用于POP3/SMTP方式收发邮件,一般有缓存功能,端口一般为110/25

  • SOCKS代理:只是单纯的传递数据包,不关心协议和具体用法,所以速度一般很快,有缓存功能,端口号为1080。

根据匿名程度区分:

  • 高度匿名代理:将数据包原封不动地转发,在服务端看来就是一个普通的客户端在访问,而记录的IP则是代理服务器的IP

  • 普通匿名代理:会在数据包上做出一定的改动,有可能会被追查到真实IP。代理服务器通常会加入的HTTP头有:HTTP_VIA、HTTP_X_FORWARDED_FOR

  • 透明代理:改动数据包且还会告诉服务器真实的IP,这类代理除了能用缓存提供浏览速度能用内容过滤提高安全性之外,并无其他显著作用。最典型的例子就是内网中的硬件防火墙

  • 间谍代理:组织或个人创建的用于记录用户传输的数据,然后进行研究、监控等目的的代理服务器。

5. 常见代理设置

  • 使用网上的免费代理:最好使用高匿代理

  • 使用付费代理服务:

  • ADSL拨号:拨一次号换一次IP

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏劫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值