Python学习之路 | 爬虫篇【1】

爬虫、HTTP和HTTPS

数据的来源

1、企业生产的用户数据
2、数据管理咨询公司
3、政府/机构提供的公开的数据
4、第三方数据平台购买数据
5、爬虫爬取数据

爬虫的定义

网络爬虫或者网页蜘蛛,就是模拟客户端发送网络请求,接受请求响应,一种按照一定的规则,自动地抓取互联网信息的程序
只要是浏览器能做的事情,爬虫都能够做

爬虫怎么抓取网页上的数据

网页三大特征:
1、网友都有自己唯一的URL
2、网页都是HTML来描述页面信息
3、网页都使用HTTP/HTTPS协议来传输HTML数据
爬虫的设计思路:
1、确定需要爬取的URL地址
2、通过HTTP/HTTPS协议获取对应的HTML页面
3、提取HTML页面有用的数据

爬虫的分类

#通用网络爬虫,是搜索引擎抓取系统的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份
抓取网页→数据存储→预处理→提供检索服务,网站排名
#聚焦网络爬虫,指的是根据既定的目标有选择有目的地到互联网上获取数据
在这里插入图片描述

通用搜索引擎工作原理

通⽤⽹络爬⾍从互联⽹中搜集⽹⻚,采集信息,这些⽹⻚信息⽤于为搜索引擎建⽴索引从⽽提供⽀持,它决定着整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。

第一步:抓取网页

1.⾸先选取⼀部分的种⼦URL,将这些URL放⼊待抓取URL队列;
2.取出待抓取URL,解析DNS得到主机的IP,并将URL对应的⽹⻚下载下来,存 储进已下载⽹⻚库中,并且将这些URL放进已抓取URL队列。
3.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放⼊待抓取 URL队列,从⽽进⼊下⼀个循环…
在这里插入图片描述
搜索引擎如何获取一个新网站的URL:
1、新网站向搜索引擎主动提交网址:(如百度
http://zhanzhang.baidu.com/linksubmit/url))
2、在其他⽹站上设置新⽹站外链(尽可能处于搜索引擎爬⾍爬取范围)
3、搜索引擎和DNS解析服务商(如DNSPod等)合作,新网站域名将被迅速抓取。

Robots协议:
也叫爬虫协议、机器人协议等,全称是“网络爬虫排除标准(Robots Exclusion Protocol)”,网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,例如:
淘宝网:https://www.taobao.com/robots.txt
腾讯网:http://www.qq.com/robots.txt

第二步:数据存储

搜索引擎通过爬⾍爬取到的⽹⻚,将数据存⼊原始⻚⾯数据库。其中的⻚⾯数 据与⽤户浏览器得到的HTML是完全⼀样的。
搜索引擎蜘蛛在抓取⻚⾯时,也做⼀定的重复内容检测,⼀旦遇到访问权重很 低的⽹站上有⼤量抄袭、采集或者复制的内容,很可能就不再爬⾏。

第三步:预处理

搜索引擎将爬虫抓取回来的页面,进行各种步骤的预处理。

  • 提取⽂字
  • 中⽂分词
  • 消除噪⾳(⽐如版权声明⽂字、导航条、⼴告等……)
  • 索引处理
  • 链接关系计算
  • 特殊文件处理

第四步:提供检索服务,网站排名

搜索引擎在对信息进行组织和处理后,为用户提供关键字检索服务,将检索相关的信息展示给⽤户。
同时会根据⻚⾯的PageRank值(链接的访问量排名)来进⾏⽹站排名,这样 Rank值⾼的⽹站在搜索结果中会排名较前,当然也可以直接使⽤ Money 购买 搜索引擎⽹站排名,简单粗暴。
在这里插入图片描述

聚焦爬虫

聚焦爬⾍,是"⾯向特定主题需求"的⼀种⽹络爬⾍程序,它与通⽤搜索引擎爬⾍ 的区别在于: 聚焦爬⾍在实施⽹⻚抓取时会对内容进⾏处理筛选,尽量保证只抓取与需求相关的⽹⻚信息。

HTTP和HTTPS协议

概念:通信计算机双⽅必须共同遵从的⼀组约定,只有遵守这个约定,计算机 之间才能相互通信
HTTP协议(HyperText Transfer Protocol,超⽂本传输协议):是⼀种发布 和接收 HTML⻚⾯的⽅法。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲 是HTTP的安全版,在HTTP下加⼊SSL层
SSL(Secure Sockets Layer 安全套接层)主要⽤于Web的安全传输协议,在 传输层对⽹络连接进⾏加密,保障在Internet上数据传输的安全

  • HTTP的端口号为80
  • HTTPS的端口号为443

HTTP的请求与响应

HTTP通信由两部分组成:
客户端请求消息与服务器响应消息
1、当⽤户在浏览器的地址栏中输⼊⼀个URL并按回⻋键之后,浏览器会向 HTTP服务器发送HTTP请求。HTTP请求主要为“Get”和“Post”两种⽅法。
2、当我们在浏览器输入URL
http://www.baidu.com 的时候,浏览器发送⼀ 个Request请求去获取 http://www.baidu.com 的html⽂件,服务器把 Response⽂件对象发送回给浏览器。
3、浏览器分析Response中的 HTML,发现其中引⽤了很多其他⽂件,⽐如 Images⽂件,CSS⽂件,JS⽂件。
4、当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了

URL:统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法
基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor] scheme:协议(例如:http, https, ftp)
host:服务器的IP地址或者域名
port#:服务器的端⼝(如果是走协议默认端口,缺省端口80)
path:访问资源的路径
query-string:参数,发送给http服务器的数据 anchor:锚(跳转到⽹⻚的指定锚点位置)
anchor:锚(跳转到网页的指定锚点位置)

客户端HTTP请求

URL只是标识资源的位置,⽽HTTP是⽤来提交和获取资源。客户端发送⼀个 HTTP请求到服务器的请求消息,包括以下格式:
请求行、请求头部、空行、请求数据
四个部分组成,下图为请求报文的一般格式
在这里插入图片描述

一个典型的HTTP请求示例

 1GET / HTTP/1.1
 2Host: www.baidu.com
 3Connection: keep-alive
 4Cache-Control: max-age=0
 5Upgrade-Insecure-Requests: 1
 6User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.3
 7Sec-Fetch-Mode: navigate
 8Sec-Fetch-User: ?1
 9Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/web
10Sec-Fetch-Site: same-origin
11Referer: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=bai
12Accept-Encoding: gzip, deflate, br
13Accept-Language: zh-CN,zh;q=0.9
14Cookie: BIDUPSID=4049831E3DB8DE890DFFCA6103FF02C1;

请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP0.9:只有基本的文本get功能
HTTP1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法:get,post和head方法。
HTTP1.1:在1.0基础上进行更新,新增了五种请求方法:options,put,delete,trace和connect方法。
HTTP2.0(未普及):请求/响应首部的定义基本没有改变,只是所有首部键必须全部小写,而且请求行为要独立为:method,:scheme、:host、:path这些键值对

HTTP请求主要分为get和post两种方法

  • get是从服务器上获取数据,post是向服务器传送数据
  • get请求参数显示,都显示在浏览器网址上,HTTP服务器根据该请求所包含URL中的参数来响应内容,即“get”请求的参数是URL的一部分。例如: http://www.baidu.com/s?wd=Chinese
  • post请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“content-type”消息头里,指明该消息体的媒体类型和编码

常用的请求报头

1、host(主机和端口号)
host:对应网址URL中的web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。
2、connection(链接类型)
connection表示客户端与服务连接类型
1)client发起一个包含“connection:keep-alive”的请求,HTTP/1.1使用“keep-alive”为默认值
2)server收到请求后:

  • 如果server支持keep-alive,回复一个包含connection:keep-alive的响应,不关闭连接:

  • 如果server不支持keep-alive,回复一个包含connection:close的响应,关闭连接

  • 如果client收到包含connection:keep-alive的响应,向同一个连接发送下一个请求,直到一方主动关闭连接

3、Upgrade-Insecure-Requests (升级为HTTPS请求)
Upgrade-Insecure-Requests:升级不安全的请求,意思是会在加载 http 资 源时⾃动替换成 https 请求,让浏览器不再显示https⻚⾯中的http请求警报。
4、user-agent(浏览器名称)
User-Agent:是客户浏览器的名称
5、accept(传输文件类型)
Accept:指浏览器或其他客户端可以接受的MIME(Multipurpose Internet Mail Extensions(多⽤途互联⽹邮件扩展))⽂件类型,服务器可以根据它判 断并返回适当的⽂件格式。
Accept: / :表示什么都可以接收。
Accept:image/gif :表明客户端希望接受GIF图像格式的资源;
Accept:text/html :表明客户端希望接受html⽂本。
Accept: text/html, application/xhtml+xml;q=0.9,
image/*;q=0.8 :表示浏览器⽀持的 MIME 类型分别是 html⽂本、xhtml和xml⽂档、所有的图像格式资源。
6、Referer(页面跳转处)
Referer:表明产⽣请求的⽹⻚来⾃于哪个URL,⽤户是从该 Referer⻚⾯访问 到当前请求的页面。这个属性可以用来跟踪web请求来自哪个页面,是从什么网站来的等。
7、accept-encoding(文件编解码格式)
Accept-Encoding:指出浏览器可以接受的编码⽅式。编码⽅式不同于⽂件格 式,它是为了压缩⽂件并加速⽂件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式,许多情形下这可以减少大量的下载时间。
8、Accept-Language(语言种类)
Accept-Langeuage:指出浏览器可以接受的语⾔种类,如en或en-us指英 语,zh或者zh-cn指中⽂,当服务器能够提供⼀种以上的语⾔版本时要⽤到。
9、Accept-Charset(字符编码)
Accept-Charset:指出浏览器可以接受的字符编码
10、Cookie
Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息
11、Content-Type(POST数据类型)
content-type:post请求里用来表示内容的类型。

服务端HTTP响应

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行、响应正文

 1HTTP/1.1 200 OK
 2Bdpagetype: 1
 3Bdqid: 0xdbeb11ea000cfef4
 4Cache-Control: private
 5Connection: keep-alive
 6Content-Encoding: gzip
 7Content-Type: text/html
 8Cxy_all: baidu+642857607c537ed21fa04bcfb54ff6ee
 9Date: Thu, 02 Jan 2020 06:32:55 GMT
10Expires: Thu, 02 Jan 2020 06:32:51 GMT
11Server: BWS/1.1
12Set-Cookie: delPer=0; path=/; domain=.baidu.com
13Set-Cookie: BDSVRTM=6; path=/
14Set-Cookie: BD_HOME=0; path=/
15Set-Cookie: H_PS_PSSID=1448_21096_30210_30283_30504; path=/; domain=.ba
16Strict-Transport-Security: max-age=172800
17Traceid: 1577946775028760116215846779410554093300
18Vary: Accept-Encoding
19X-Ua-Compatible: IE=Edge,chrome=1
20Transfer-Encoding: chunked

常⽤的响应报头(了解)
1、ache-Control:must-revalidate, no-cache, private。
这个值告诉客户端,服务端不希望客户端缓存资源,在下次请求资源时,必须 要从新请求服务器,不能从缓存副本中获取资源。
2、connection:keep-alive
这个字段作为回应客户端的Connection:keep-alive,告诉客户端服务器的 tcp连接也是⼀个⻓连接,客户端可以继续使⽤这个tcp连接发送http请求。
3、content-encoding:gzip
告诉客户端,服务端发送的资源是采⽤gzip编码的,客户端看到这个信息后, 应该采⽤gzip对资源进⾏解码。
4、Content-Type:text/html;charset=UTF-8
告诉客户端,资源文件的类型,还有字符编码客户端通过utf-8解码,然后对资源进⾏html解析。通常我们会看到有些⽹站是乱码的,往往就是 服务器端没有返回正确的编码。
5、Date:Thu,02 Jan 2020 06:32:55 GMT
这个是服务端发送资源时的服务器时间,GMT是格林尼治所在地的标准时间。 http协议中发送的时间都是GMT的,这主要是解决在互联⽹上,不同时区在相 互请求资源的时候,时间混乱问题。

响应状态码

响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
常见状态码:
100~199 :表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
200~299 :表示服务器成功接收请求并已完成整个处理过程。常⽤200 (OK 请求成功)。
300~399 :为完成请求,客户需进⼀步细化请求。例如:请求的资源已经移动⼀个新地址、常⽤302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)
400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)
500~599:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值