爬虫基础、http和https

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44863429/article/details/102772436

一、爬虫

网络爬虫的定义:自动的抓取互联网上的信息的程序或者脚本

(一)爬虫可以解决的问题

  1. 解决冷启动问题
  2. 搜索引擎的根基
  3. 建立知识图谱,帮助建立机器学习知识图谱
  4. 可以制作各种商品的比价软件,趋势分析

二、通用爬虫和聚焦爬虫

根据使用场景,网络爬虫分为通用爬虫和聚焦爬虫。

(一)通用爬虫

搜索引擎

  1. 搜索引擎的主要组成
    通用爬虫:将互联网页面整体爬取下来后,保存在本地。(没有做数据清洗的)
    通用爬虫要想爬取网页,需要网站的url,但是搜索引擎是可以搜索所有网页的。那么通用爬虫url就要涉及到所有网页。
    搜索引擎如何获取url:
    • 新网站向搜索引擎主动提交网址
    • 在其它网站上设置新网站外链(尽可能处于搜索引擎的范围之内)
    • 搜索引擎和DNS解析服务商(如DNSPod等)合作,新网站域名将被迅速抓取。
  2. 所有引擎的工作流程:
    • 第一步:抓取网页
      • 通过将待爬取的url加入到通用爬虫的url队列中,进行网页内容的爬取。
    • 第二步:数据存储:
      • 将爬取下来的网页保存到本地。这个过程中会有一定的去重操作。如果某个网页的内容大部分重复,搜索引擎可能不会保存。
    • 第三步:预处理
      • 提取文字
      • 中文分词
      • 消除噪音(比如版权声明文字、导航条、广告等)
      • 索引处理
    • 第四步:设置网站排名,为用提供检索服务(PageRank值)
  3. 搜索引擎的局限性:
    • 搜索引擎只能爬取原网页,但是页面90%内容都是无用的。
    • 搜索引擎不能满足不同行业,不同人员的特定需求。
    • 通用爬虫只能爬取文字信息,对于视频、文件、音频、图片等其他信息无法爬取。
    • 只能基于关键字查询,无法基于语义查询。

(二)聚焦爬虫

聚焦爬虫:在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。

二、爬虫的准备工作

(一)robots协议

robots协议:网络爬虫排除标准。

作用:告诉搜索引擎那些内容可以爬,哪些不能爬

在这里插入图片描述

(二)网站地图sitmap

一个网站地图,可以查看该网页下有哪些内容

https://help.bj.cn/

(三)估算网站大小

使用搜索引擎,在百度中使用site:域名

在这里插入图片描述

(四)识别网站用了何种技术

安装

pip install builtwith
在python的交互模式下输入:
import builtwith
builtwith.parse('http://www.maoyan.com')

在这里插入图片描述

(五)需要知道网站的所有者是谁

安装python-whois:pip install python-whois
在python交互模式下输入:
import whois
whois.whois('http://www.sina.com.cn')

三、http和https

(一)什么是http协议?

http:超文本传输协议

约束发布和接收html页面的规范

https:http的安全办,在http下加入ssl层

(二)端口号

http端口号为80

https端口号为443

(三)http协议的特点

  1. 应用层协议
  2. 无连接:每次请求都是独立的
    • http 1.1 增加了一个connection:keep-alive,这个头表示,客户端和服务器的连接是一个长连接
  3. 无状态:客户端每次请求都不能记录请求状态。即两条请求之间无法进行通信。
    • cookie和session可以帮助记录状态

(四)url:统一资源定位符

为什么可以通过url来定位互联网上的任意资源?

http://ip:port/path

  • ip:定位电脑

  • port:端口号–用来从互联网上进入电脑

  • path:在电脑中找到对应的资源路径

    #有三种特殊符号
    ? – 请求参数
    & – 请求参数用&连接

    – 锚点:在请求url时,页面跳转锚点指定位置

  • 基本格式:
    scheme://host[:port#]/path/…/[?query-string][#anchor]
    scheme:协议(例如:http, https, ftp)

    • host:服务器的IP地址或者域名
    • port:服务器的端口(如果是走协议默认端口,缺省端口80)
    • path:访问资源的路径
    • query-string:参数,发送给http服务器的数据
    • anchor:锚(跳转到网页的指定锚点位置)

在python中,有一个模块可以帮助我们解析url。

代码:
from urllib import parse
url = 'http://localhost.com:8080/index.htmusername="zhangsan"&password="123"'
print(parse.urlparse(url))
输入内容:
ParseResult(
scheme='http', 
netloc='localhost.com:8080', 
path='/index.htm', 
params='', 
query='', 
fragment='')

(五)http工作过程

1.地址解析,将url解析出对应的内容:

scheme:协议(例如:http, https, ftp)
host:服务器的IP地址或者域名
port:服务器的端口(如果是走协议默认端口,缺省端口80)
path:访问资源的路径
query-string:参数,发送给http服务器的数据
anchor:锚(跳转到网页的指定锚点位置)

2.封装http请求数据包

3.封装成TCP包,建立TCP连接(TCP的三次握手)

  • TCP握手协议
    • 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
      SYN:同步序列编号(Synchronize Sequence Numbers)
    • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
      完成三次握手,客户端与服务器开始传送数据

4.客户端发送请求

5.服务器发送响应

6.服务器关闭TCP连接

(六)当在浏览器输入一个url,为什么可以加载出一个页面?

为什么在抓包的过程中,请求了一个url,会出现很多的自愿请求

  1. 当我们在浏览器输入一个url,客户端会发送这个url对应的一个请求到制定服务器获取内容;
  2. 服务器收到这个请求,解析出对应的内容,之后将内容封装到响应里面发送给客户端;
    比如index.html页面
  3. 当客户端拿到这个html页面,会查看这个页面中是否有css、js、image等url,如果有,在分别进行请求,获取到这些资源;
  4. 客户端会通过html的语法,将获取到的所有内容完美的显示出来。

(七)客户端请求

  1. 组成:请求行、请求头部、空行、请求数据四个部分组成
  2. 请求方法get/post
    • get方法:
      get,通过服务器上请求参数来获取资源,?后面是请求参数,用&拼接,不安全,传输参数大小受限
    • post请求:
      post,向服务器传递封装在请求实体里的数据,可以传递更多内容,安全
    • get和post的区别:
      • get是从服务器获取内容,post是向服务器传递内容
      • get不安全,因为参数拼接在url后面。post比较安全,因为参数是放在实体里
      • get传参他笑受限,post不受限
  3. 重要的请求头:
    • User-Agent:客户端请求标识
    • Accept:(传输文件类型)允许传入的文件类型
    • Referer:表名产生请求的网页来自于哪个url,用户是从该Referer页面访问到当前请求的页面
    • cookie (cookie):在做登录的时候需要封装这个头
    • Content-Type (POST数据类型)
    • 发送POST请求时,需要特别注意headers的一些属性:
      • Content-Length: 144; 是指发送的表单数据长度为144,也就是字符个数是144个
    • X-Requested-With:XMLhttpReauest; 表示ajax异步请求

(八)服务响应

  1. 组成:状态行,响应头,空行,响应正文。
  2. 重要响应头:
    • Content-Type: text/html; charset = UTF-8; 告诉客户端,资源文件的类型,还有字符编码
  3. 状态码:
    • 100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程
    • 200~299:表示服务器成功接收请求并已完成整个处理过程。常用200(OK请求成功)
    • 300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)
    • 400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够–DDos)
    • 500~599:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)

猜你喜欢

转载自blog.csdn.net/weixin_44863429/article/details/102772436
今日推荐