爬虫前置


爬虫基础知识

小计:对于爬虫的学习主要是通过《python3网络爬虫开发实战》进行,在开始学习之前有本书有很多的依赖库或环境安装,可能有一些在最初始的学习中并不会用到,但还是基本都装上了,所以耗时挺久,水了老久了之后会写一个关于安装的环境等的小结

URI和URL

  • URI被称作统一资源标志符(Uniform Resourse Identifier)
  • URL被称为统一资源定位符 (Uniform Resourse Locator)

URI下包括了URL与URN(统一资源名称)(一般并不常用)

URL指定了唯一访问一个资源的链接

由于URN在互联网中运用并不多,所以几乎所有的URI都是URL

超文本

简单说就是HTML的代码

Http与Https

访问资源所需要的协议类型,是计算机网络的知识,两个都是应用层协议,通常还可以看到ftp,sftp等协议开头的URL

  • http是超文本传输协议,现在最常用的是http1.1

  • https是在http的基础上加上了SSL服务,用于SSL加密确保安全(也是一个应用层协议)

  • 现在更多的网站和APP等都使用的是https

  • http请求过程:详见计网,简单的就是本地请求,服务器响应请求

    • 可以在访问一个页面时f12看network,可以看到服务器返回给本地的文件
    • image-20200903233402223
      • 其中的initiator是指请求源:标记请求是由哪一个对象或者进程发起的
      • waterfall:网络请求可视化瀑布流
      • 点击其中一条可以看到更多的信息,比如referrer和referrer policy为判别策略
    1. get与post方法

      • 一般使用的两种请求方法,,不同点是get的请求参数在URL里而post请求的url不会包含这些数据。数据以表单形式进行传输,包含在请求体中

      • get最多提交1024字节的数据post没有限制

      • 一般来说,登录时,需要提交用户名和密码,其中包含了敏感信息,使用 GET 方式请求的话,密码就会暴露在 URL 里面,造成密码泄露,所以这里最好以 POST 方式发送 上传文件时,由于文件内容比较大,也会选用 POST 方式

        image-20200905231527886

        这些其实都是计网内容,也算是一次复习

    2. 请求头

      请求头用来说明服务器需要使用的附加信息,记录几个比较重要的

      • Accept:请求报头域,指定客户端可接受信息类型
      • Accept-language:客户端可接受语言类型
      • Accept-Encoding: 客户单可接受编码
      • Host;指定请求资源的主机的IP及端口号 ,其内容为被请求的URL的原始服务器或网关的位置。
      • cookie:简单来说就是网站为了识别用户的存储在本地的数据,主要用于维持当前访问当前会话 ,比如即使在关闭了网页但再打开依旧是登录状态,就是cookie在请求时又被发送过去了。服务器识别出了用户且是登录状态。
      • Referer:用于标识这个请求时从哪个页面发来的,服务器可以做来源统计以及防盗链接
      • User-Agent:简称AG,特殊的字符串头,让服务器识别客户的操作系统及版本,浏览器版本等信息,爬虫加上此信息可以伪装浏览器,不加容易被识别
      • Content-Type:互联网媒体类型,表示具体请求中的媒体类型信息(http中),比如text/html 代表的是HTML格式,image/gif 代表的是gif图片

      所以请求头很重要,是哦运管爬虫时大多需要请求头

    3. 请求体

      • 请求体承载POST方法时的表单数据,对于GET请求,请求体为空

    image-20200909220842530

    image-20200909220929942

    爬虫中如果需要构造POST请求需要使用正确的Content-type

    1. 响应码

      不做列举,常用的记住就行 可以写但没必要

    2,3,4,5开头的大概是啥记住就好,具体的可以查阅

    1. 响应头
      • 包含了服务器的响应信息,说一些常用的头
      • Date:响应产生的时间
      • Last-Modified:指定资源最后的修改时间
      • Content-Encoding;指定内容的编码
      • Server:包含服务器的信息。包括名称和编号之类的
      • Content-type:文档类型
      • Set-cookie:设置cookie,告诉浏览器该内容要放在cookie中,下次请求携带cookie信息
      • Expires:指定响应时间,可以使代理服务器或浏览器将加载的内容存储到缓存中
    2. 响应体
      • 响应的正文都在响应体中,做爬虫请求网页后,要解析的内容就是响应体
      • 浏览器开发者工具中的preview就是网页源代码也就是响应体的内容太,是解析的目标

网页基础

​ 网页是HTML,css,javascript组成的,HTML是文本,css是结构,js是一种脚本语言,负责交互以及一些动画

  • html:即超文本标记语言,使用标签来进行编写,各种标签的排列组合形成了网页
  • css:即层叠样式表,只有HTML不美观,使用css来进行帮助,在网页中一般会定义整个网页的样式规则,并写入一个css文件,在html文件中只需要用link标签引用写好的css文件就好了,定义了网页的格式
  • javascript:一般也是以单独的文件加载,使用script标签进行引入,定义了网页的行为

具体语法不在此赘述,前端学习无论是书籍还是网站都是很多的

https://www.bilibili.com/

http://www.w3school.com.cn/

http://www.runoob.com/

  1. 节点以及节点树的关系

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

    • DOM是一种标准,定义了html,xml文档的标准
    • 选择器:css使用选择器来定位节点

image-20200910165216829

爬虫基础

简单来说爬虫就是获取和保存信息的自动化程序

流程:

  1. 使用库来获取网页
  2. 提取信息(一般使用正则表达式,或者选择器以及Xpath)
  3. 保存信息(简单的是保存为txt,json,也可以保存到数据库里)
  • 抓取什么数据:最常见的是抓html源码,当然也有其他格式数据,只要是http,https协议的爬虫都可以爬取

在使用urllib,requests库进行抓取时有的时候会出现实际的HTML代码和抓取的不一样,这是因为现在越来越多的网页是使用js来渲染,html是一个空壳,所以我们很多时候需要使用Selenium,Splash库来模拟js渲染

  • 静态网页以及动态网页
  • 一个基础的.html文件放在安装了站点服务的服务器上就可以被访问了,这种简单的由html来编写的网页就是静态网页,加载快且编写简单,但是可维护性差。
  • 动态网页可以解析URL中的参数,关联数据库呈现不同的内容

我们可以在f12里的application中的storage找到cookie,其中的字段值做一个简单介绍

  • Name:一旦创建,名称不可更改
  • Value:cookie值,如果值为Unicode编码则需要为字符编码,如果为二进制数据则为base64编码
  • Domain:可以访问cookie的域名,如果设置为.zhihu.com结尾则所有以zhihu.com 结尾的域名都可以访问该cookie
  • Max Age:该cookie的失效时间
  • Path:该cookie的使用路径
  • size:大小
  • http字段:cookie的httponly属性,若是为true,则只有在http头中会带有此cookie信息而不能通过document.cookie来访问
  • secure:是否被安全传输

cookie放在浏览器/磁盘中,(放在浏览器中关闭浏览器即cookie失效,磁盘中保存久)严格来说没有会话cookie和持久cookie的区别,只是由max age 或experires字段来决定,一些持久化登录网站就是把时间设置的长罢了。

代理

代理服务器,不过多赘述,爬虫需要代理,否则爬虫访问过快网站的反爬机制会有封ip 或让输入验证码的操作,隐藏自己的ip,是爬虫一个重要的机制代理也会在很多地方用到

可以按照代理协议类型和代理匿名程度分类

  • 协议
    • FTP代理服务器:一般有上传下载缓存功能,端口一般为21,2121等
    • HTTP代理服务器:主要用于访问网页,一般有内容过滤和缓存功能,端口一般为80,8080,3182等
    • SSL/TLS代理服务器:主要用于加密网站访问,有SSL,TLS加密功能,(最高支持128位加密)端口一般为443
    • RTSP代理服务器:主要用于访问Real流服务器,一般有缓存功能,端口为554
    • Telnet代理服务器:主要用于Telnet远程控制(黑客入侵电脑时常用于隐藏身份)端口23
    • POP3/SMTP:110/25端口
    • SOCKS代理:单纯传递数据包,不关心协议以及具体用法,速度快,端口一般为1080
  • 匿名程度
    • 高度匿名代理:数据包原封不动的转发,服务端看起来就像一个真实用户在操作
    • 普通匿名代理:数据包上会做一些改动,可能会被发现是代理服务器且被发现真实ip
    • 透明代理:不但改动了数据包还告诉了服务端真实ip,作用有通过代理提高访问速度,用内容过滤提高安全性
    • 间谍代理:记录用户传输的数据,用以研究监控的代理服务器。

文章作者: 0xahh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xahh !
评论
  目录