简单爬虫基础

2021/6/14 18:22:43

本文主要是介绍简单爬虫基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

爬虫基础

HTML基本原理

  • URI——统一资源标志符

  • URL——统一资源定位符

  • URN——统一资源名称

  • HTTP全称Hyper Text Transfer Protocol,即超文本传输协议。HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议

  • HTTPS全称Text Transfer Protocol over Secure Socket Layer-HTTP的安全版,即在HTTP下加上SSL层,简称为HTTPS。

  • HTTPS的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的。

SSL加密的作用

  • 建立一个信息安全通道来保证数据传输的安全.
  • 确认网站的真实性,凡是使用了HTTPS的网站,都可以通过点击浏览器地址的锁头标志来查看网站认证之后的真实信息,也可以通过CA机构颁发的安全签章来查询.

某些网站虽然使用了HTTPS协议,但还是会被浏览器提示不安全,例如在Chrome浏览器里面打开12306,链接为:https://www.12306.cn/,这时候浏览器就会提示"你的连接不是私密链接"这样的警告.这是因为12306的CA证书是中国铁道部自行签发的,而这个证书是不被CA机构信任的,所以这里证书验证就不会通过而发出警告,但是实际上它的数据传输依旧是通过SSL加密的,如果要爬取这样的站点,就需要设置忽略证书的选项,否则就会提示SSL链接错误.

HTTP请求过程

我们在浏览器输入一个URL,回车之后便会在浏览器中观察到页面内容.实际上,这个过程是浏览器想网站所在的服务器发送了一个请求**,网站服务器接收到该请求后进行处理和解析,然后返回对应的响应**,接着传送回了浏览器.响应里包含了页面的源代码等内容,浏览器再对其解析,便将网页呈现了出来.

使用开发者模式观察请求过程

  • 打开浏览器,右击并选择**"检查"项,即可打开开发者模式**

  • 查看network监听组件-显示访问当前请求网页时发生的所有网页请求和响应

  • network页面下放有很多条目,其中一个条目就代表一次发送请求和接收响应的过程,其中各列的含义如下:

    • Name:请求的名称,一般会将URL的最后一部分当做名称
    • Status:响应的状态码,显示200表示响应正常.通过状态码,我们可以判断发送请求之后是否得到了正常的响应.
    • Type:请求的文档类型.document代表请求的是一个HTML文档,内容就是一些HTML代码
    • Initiator:请求源,用于标记请求是由哪个对象或进程发起的.
    • Size:从服务器下载的文件和请求的资源大小.如果是从缓存中取得的资源,则该列会显示from cache
    • Time:发起请求到获取响应所用的总时间.
    • Waterfall:网络请求的可视化瀑布流.

点击某一个条目的详细内容

  • 首先是General部分,Request URL为请求的URL,Request Method为请求的方法,Status Code为响应状态码,Remove Address为远程服务器的地址和端口,Referrer Policy为Referrer判别策略

  • 接下来是有:Request Headers和Response Headers,分别表示请求头响应头:

    • 请求头中带有许多请求信息,例如浏览器标识,Cookies,Host等信息,这是请求的一部分.服务器会根据请求头内的信息判断是否合法,进而做出对应的响应.
    • Response Headers就是响应的一部分,例如其中包含了服务器的类型,文档类型,日期等,浏览器接收到响应后,会解析响应内容,进而呈现网页内容.

请求

请求包含四部分:

  • 请求方法
  • 请求的网址
  • 请求头
  • 请求体

请求方法

常见有两种:

  • GET
  • POST

两者的区别:

  • GET请求中的参数包含在URL里面**,数据可以在URL中看到**,而POST请求的URL不包含这些数据,数据通过表单形式传输,包含在请求体中

  • GET请求提交的数据最多只有1024字节,而POST方法没有限制

一般来说,因为GET的数据可以在URL中看到,所以包含敏感信息时,最好使用POST请求;上传文件时,由于文件内容比较大,也会选用POST方式.

包含其它方法的表格如下:

方法描述
GET请求页面,并返回页面内容
HEAD类似于GET请求,只不过返回的响应中没有具体的内容 ,用于获取报头
POST大多数用于提交表单或上传文件,数据包含在请求体中
PUT从客户端向服务器传送的数据取代指定文档中的内容
DELETE请求服务器删除指定的页面
CONNECT把服务器当做跳板,让服务器代替客户端访问其它网页
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,主要用于测试和诊断

请求的网址

请求的网址,即统一资源定位符,它可以唯一确定我们想请求的资源.

请求头

用于说明服务器要使用的附加信息,比较重要的信息有Cookie,Referer,User-Agent等:

  • Accept:请求报头域,用于指定客户端可接收哪些类型的信息

  • Axxept-Language:指定客户端可接收的语言类型

  • Accept-Encoding:指定客户端可接收的内容编码

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

  • Cookie:常用复数形式Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据.主要功能:维持当前访问会话.

  • Referer:用于标识这个请求时是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如来源统计,防盗链处理等

  • User-Agent:简称UA,一个特殊的字符串头,可以使服务器识别用户使用的操作系统及版本,浏览器及版本等信息.在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫

  • Content-Type:也叫互联网媒体类型或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息

请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头

请求体

请求体一般承载的是POST请求中的表单数据,而对GET,请求体为空

Content-Type和POST提交数据的方式的关系

Content-Type提交数据的方式
application/x-www-form-urlencoded表单数据
multipart/form-data表单文件上传
application/json序列化JSON数据
text/xmlXML数据

响应

由服务端返回给客户端,可以分成3部分:响应状态码,响应头和响应体.

响应状态码

常见的响应状态码:(其它的遇到再查)

状态码说明详情
200成功请求者应当继续提出请求.服务器已收到请求的一部分, 正在等待剩余部分
404未找到服务器找不到找不到请求的网页
500服务器内部错误服务器遇到错误,无法完成请求

响应头

响应头包含了服务器对请求的应答信息,如Content-Type,Server,Set-Cookie,一些常用的头信息:

  • Data:标识响应产生的时间
  • Last-Modified:指定资源的最后修改时间
  • Content-Encoding:指定响应内容的编码
  • Server:包含服务器的信息,比如名称,版本号等
  • Content-Type:文档类型,指定返回的数据类型是什么
  • Set-Cookie:设置Cookies.响应头中的Set-cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求
  • Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到内存.如果再次访问,就可以直接从缓存中加载,降低服务器负载,缩短加载时间

响应体

最重要的当属响应体的内容.响应的正文部分都在响应体中,比如请求网页是,它的响应体就是网页的HTML代码;请求一张图片是,它的响应体就是图片的二进制数据.做爬虫请求网页后,需要解析的内容就是响应体

网页基础

网页组成

网页三大部分:

  • HTML- 定义网页的内容和架构
  • CSS- 描述网页的布局
  • JavaScript- 定义网页的行为

节点数与节点间的关系

W3C文档对象(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容,结构和样式.

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

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

  • 整个文档是一个文档节点
  • 每个HTML元素都是元素节点
  • HTML元素内的文本是文本节点
  • 每个HTML属性是属性节点
  • 注释是注释节点

HTML DOM将HTML文档视为树结构,这种结构被成为节点树:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yqolHPyH-1618848321155)(D:\图片\微信截图_20210324172722.png)]

节点树中的节点彼此拥有层级关系.我们常用父,子,兄弟等术语描述这些关系.上下级为父与子关系,同级为兄弟关系.顶端节点称为根(root)

选择器

在CSS中,我们使用CSS选择器来定位节点.

常用选择的3种方式:

  • #开头代表选择id,其后紧跟id的名称
  • .开头代表选择class,其后紧跟class的名称
  • 根据标签名筛选,例如选择二级标题,直接用h2即可

CSS还支持嵌套选择,如:

#container .wrapper p代表先选择id为container的节点,然后选中其内部的class为wrapper的节点,然后再进一步选择其内部的p节点.另外,如果不加空格,则表示并列关系.

CSS的部分语法规则:

选择器例子例子描述
.class.intro选择class="intro"的所有节点
#id#firstname选择id="firstname"的所有节点
**选择所有节点
elementp选择所有p节点
element,elementdiv,p选择所有div节点和所有p节点
element elementdiv p选择div节点内部的所有p节点
element>elementdiv>p选择父节点为div节点的所有p节点
element+elementdiv+p选择紧接再div节点之后的所有p节点

爬虫的基本原理

概述:爬虫就是获取网页并提取和保存信息的自动化程序

1.获取网页

使用urlib,requests等库实现HTTP请求操作,请求和响应都可以利用类库提供的数据结构来表示,得到响应之后只需要解析数据结构中的Body部分

2.提取信息

  • 通用方法:采用正则表达式提取

  • 其它方法:利用网页结构提取网页信息的库:Beautiful Soup,pyquery,lxml等

3.保存数据

可以保存至:

  • TXT文本或JSON文本
  • 数据库,如MySQL,MongoDB
  • 远程服务器,利用SFTP进行操作

4.自动化程序

代替人工完成爬取工作的自动化程序

能抓的数据

  • HTML源代码
  • JSON字符串
  • 二进制数据
  • 只要可以在浏览器访问到的文件都可以抓取.

JavaDcript渲染页面

处理所爬取的源代码,提高其与网页源代码的相似度.方法:

  • 分析后台Ajax接口
  • 使用Selenium,Splash库实现模拟JavaScript渲染

会话和Cookies

静态网页和动态网页

  • 静态:加载快,编写简单,可维护型差,不能根据URL灵活多变地显示内容…
  • 动态:可以动态解析URL中参数的变化,关联数据库并动态呈现不同的页面内容…

无状态HTTP

无状态—HTTP的一个特点—指的是HTTP协议对事务处理是没有记忆能力的,也就是说服务器不知道客户端是什么状态.即服务器不会记录请求和响应前后状态的变化,也就是缺少状态记录.这意味着,第一次处理过一次前面的信息后不会进行保存,第二次使用时,如若需要使用前面的信息是,需要再次上传并处理.无疑,这太浪费资源了.所以,用于保持HTTP链接状态的Cookies和会话出现了.

会话在服务端,即网站的服务器,用于保存用户的会话信息;

Cookies在客户端,有了Cookies,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器通过识别Cookies并鉴定出是哪个用户,然后再判断一年用户是否是登录状态,然后返回对应的响应.

会话

会话意指有始有终的一系列动作/消息.

在Web中,会话对象用于存储特定用户会话所需的属性及配置信息.

Cookies

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

  • 会话维持: 在成功登录某个网站时,服务器会告诉客户端设置哪些Cookies信息,在后续访问页面时,客户端会把Cookies发送到服务器,服务器再找到对应的会话加以判断.如果会话中某某些设置登录状态的变量是有效的,那就证明用户处于登录状态,此时返回登录之后才可以查看的网页内容.反之,如果Cookies是无效的,或者会话已经过期,我们将不能再访问页面.

  • 属性结构(Cookies的属性):

    • Name: 该Cookie的名称.一旦创建,该名称便不可更改
    • Value: 该Cookie的值.如果值为Unicode字符,需要为字符编码.如果值为二进制数据,则需要使用BASE64编码
    • Domain:可以访问该Cookie的域名.
    • Max Age: 该Cookie失效的时间.单位为秒,也常和Expire一起使用,通过它可以计算出其有效时间.Max Age如果为正数,则该Cookie为Max Age秒之后失效.如果为负数,则关闭浏览器时Cookie即失效,浏览器也不会以任何形式保存该Cookie
    • Path: 该Cookie的使用路径.如果设置为/path/,则只有路径为/path/的页面可以访问该Cookie.如果设置为/,则本域名下的所有页面都可以访问该Cookie
    • Size字段: 此Cookie的大小
    • HTTP字段: Cookie的httponly属性.若此属性为true,则只有在HTTP头中会带有此Cookie的信息,而不能通过document.cookie来访问此cookie
    • Secure: 该Cookie是否仅被使用安全协议传输.安全协议有HTTPS和SSL等,在网络上传输数据之前先将数据加密.默认为false

    两种Cookie:

    会话Cookie把Cookie放进浏览器内存里,浏览器关闭后,该Cookie失效
    持久Cookie把Cookie放在客户端的硬盘中,下次还可以继续使用,用于长期保持用户登录状态

    会话删除机制

浏览器关闭不会导致会话.而正因为如此,服务器需要为会话设置一个失效时间,当距离客户端上一次使用会话的时间超过这个失效时间时,服务器就可以认为客户端已经停止活动.才会把会话删除以节省存储空间.

代理的基本原理

代理实际上指的就是代理服务器,它的功能是代理网络用户去取得网络信息.即,网络信息的中转站.

本来是:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZI02W81u-1618848321156)(D:\图片\微信截图_20210324232920.png)]

添加代理服务器后:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7nudgyi8-1618848321157)(D:\图片\微信截图_20210324233030.png)]

在改进后,我们仍然可以正常访问网页,但Web服务器识别出的真实IP就再是我们本机的IP了,就成功实现了IP伪装,这就是代理的基本原理.

代理的作用

  • 突破自身IP访问限制,访问一些平时不能访问的站点
  • 访问一些单位或团体内部资源:比如使用教育网内地段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务.
  • 提高访问速度:通常代理服务器都可以设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也会将其保存到缓冲区中当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度.
  • 隐藏真实IP: 上网者也可以通过这种方法隐藏自己的IP,免受攻击.对于爬虫,就是为了隐藏自身IP防止自身IP被封锁.

爬虫代理

对于爬虫来说,要是爬虫爬取速度过快,在爬取过程中可能遇到同一个IP访问过于频繁的问题,此时网站会让我们输入验证码或者直接封锁IP,无疑,为爬虫带来了极大的不便.

使用代理隐藏真实IP,让服务器误以为是代理服务器自己请求自己.这样在爬取过程中通过不断更换代理,就不会被封锁,可以达到很好的爬取效果.

代理分类

1.根据协议分:

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

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

  • SSL/TLS代理:主要用于访问加密网站,一般有SSl或TLS加密功能(最高支持128位加密强度),端口一般为443

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

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

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

  • SOCKS代理: 只是单纯传递数据包,不关心具体协议和用法,所以速度快很多,一般有缓存功能,端口一般为1080.SOCKS代理协议又分为SOCKS4和SOCKS5,前者只支持TCP,而后者支持TCP和UDP,还支持各种身份验证机制,服务器端域名解析等.

根据匿名程度分:

  • 高度匿名代理:会将数据包原封不动地转发,在服务端看来就好像真的是一个普通客户端在访问,而记录的IP时代理服务器的IP
  • 普通匿名代理: 会在数据包上做一些改动,服务端上有可能发现这是个代理服务器,也有一定几率追查到客户端的真实IP.代理服务器通常会加入的HTTP头有HTTP_VIA和HTTp_X_FORWARDED_FOR
  • 透明代理: 不但改动了数据包,还会告诉服务器客户端的真实IP.这种代理能用缓存技术提高浏览速度,能用内容过滤提高安全性.除此之外,再无其它显著作用
  • 间谍代理: 指组织或个人创建的用于记录用户传输的数据,然后进行研究,监控等目的的代理服务器.

常见的代理设置

  • 使用网上的免费代理:最好使用高匿代理,另外可用的代理不多,需要在使用前筛选一下可用代理,也可以进一步维护一个代理池
  • 使用付费代理服务: 互联网上存在很多代理商,可以付费使用,质量比免费代理好很多
  • ADSL拨号: 拨一次号换一次IP,稳定性高,也是一种比较有效的解决方案.


这篇关于简单爬虫基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程