六、爬虫基本原理、代理

互联网是一张大网,爬虫就是在网上爬行的蜘蛛,爬行到的网页就相当于访问了该页面

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

1、获取网页

获取网页,就是获取网页的源代码,从中提取有用的信息

关键就是构造请求发送给服务端,然后接受响应并解析

python提供了许多库来实现,比如urllib、requests等,可以利用这些库实现HTTP操作,请求和响应都可以用类库的数据结构来表示

2、提取信息

获取了网页源代码,就该分析了,从中提取想要的数据

最通用的办法就是正则,这是个万能的方法,但是构造正则表达式比较复杂,容易出错

对于网页结构的结构,还有一些根据网页节点属性、CSS选择器/XPath来提取信息的库,比如Beautiful Soup、pyquery、lxml等

3、保存数据提取信息后要将其保存,保存的形式多种多样

TXT、JSON文本、数据库MySQL、MongoDB、远程服务器

爬虫能抓什么数据?

HTML网页源代码、JSON字符串、各种二进制数据、各种扩展名文件

上面都是基于HTTP和HTTPS的,有各自的URL,这种数据都能抓取

JavaScript渲染页面

有时候我们使用urllib或者requests抓取页面,得到的源代码和浏览器看到的不一样,这非常常见,越来越多的网页使用Ajax,前端模块化工具来构建,整个网页都是JS渲染出来的,原始的HTML代码就是个空壳子:

<html>
<head>
    <meta charset="UTF-8">
    <title>Demo</title>
</head>
<body>
	<div id="test"></div>
    <script src="shuai.js"></script>
</body>
</html>

浏览器打开页面加载HTML,发现引入了shuai.js文件,然后去请求这个文件,获取到后,执行JAVAScript代码,改变HTML中的节点,向其添加内容,最后得到完整页面

对于这种情况,我们可以分析Ajax接口,也可以使用selenium、Splsh这样的库来实现模拟JvavaScript渲染

会话和coodies

浏览网站,经常遇到需要登录的情况,有些页面只有登陆后才能访问,有的网站登录后可以连续访问多次,有的过一段时间就要重新登录,还有一些网站,浏览器打开就自动登录,而且长时间不失效,这里就涉及了Session和Coookie

静态网页:

  • 网页的内容是HTML代码编写的,文字、图片等内容都是通过写好的HTML代码来指定
  • 加载速度快、编写简单,但是可维护性差,不能根据URL灵活多变的显示内容

动态网页:

  • 可以动态解析URL中参数的变化,关联数据库并动态呈现不同的网页内容,非常灵活多变,它不在是一个简单的HTML,可能由JSP、PHP、python等语言编写
  • 动态网页可以实现登录和注册功能

无状态的HTTP

  • HTTP的无状态指的是HTTP协议对事物处理没有记忆能力,没有请求和响应的记录,导致要重复传递请求
  • 用于保持HTTP连接状态的技术会话和Cookie:
  • Session记录在服务端,用于保存用户的会话信息
  • Cookie保存在客户端,浏览器下次访问网页时会携带着它发送给服务器,服务器痛殴过识别它来区别是哪个用户,判断登录状态,对应响应
  • 爬虫中需要登录才能访问的页面,我们将登录成功的Cookies放在请求头里进行请求,从而不必重新登录

cookie的内容:

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

会话cookie和持久cookie

  • 会话cookie:把cookie放在浏览器内存,关闭浏览器之后,该cookie就失效
  • 持久cookie:保存到客户端硬盘,下次还能用,用于长久保持用户登录状态
  • 严格意义上cookie没有会话和持久之分,是由cookie的Max Age或者Expires决定的国企时间

注意:

  • 关闭浏览器后,会话不会消失,除非程序通知服务器删除一个会话,否则服务器会一直保留,就像银行卡,除非我们提出销户,不然银行不会轻易删除的
  • 关闭浏览器时,浏览器不会主动关闭之前通知服务器它要关闭,所以服务器不会有机会知道浏览器关闭了
  • 这就需要服务器为会话设置一个失效时间,当距离客户端上一次使用会话的时间超过这个失效时间,服务器就人为客户端已经停止了活动,才会把会话删除以节省存储空间

代理的基本原理

  • 爬虫过程中,出现403 Rorbidden,网页看到类似“IP访问频率太高”的提示
  • 这是因为网站采取了一些反爬虫措施,比如服务器会检测某个IP在单位时间内的请求次数,吐过超过阈值,就回直接拒绝服务,返回一些错误信息,可以认为IP被封

IP伪装

  • 代理实际上就是代理服务器,它代理网络用户去取得网络信息
  • 使用代理服务器去访问,Web服务器识别出的IP就不再是我们本机的IP,我们就实现了IP伪装

代理的作用

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

爬虫代理

  • 由于爬虫速度过快,爬取过程可能遭遇到同一IP访问频繁的问题,这样网站就会让我们输入验证码或者直接封IP
  • 使用代理隐藏IP,让服务器误以为是代理服务器请求自己,这样爬虫通过不断更换代理,就不会被封

代理分类

  • 可以根据协议区分或者匿名程度区分

根据协议区分:

  • FTP代理服务器:主要用于访问FTP服务器,一般有上传、下载以及缓存功能,端口一般为21、2121等
  • HTTP代理服务器:主要用于访问网页,一般有内容过滤和缓存功能,端口一般为80、8080、3128等
  • SSL/TLS代理:主要用于访问加密网站,一般有SSL或TLS加密功能(最高支持128位加密强度),端口一般为443
  • RTSP代理:主要用户访问Real流媒体服务器,一般有缓存功能,端口一般为554
  • POP3/SMTP代理:主要用于POP3/SMTP方式收发邮件,一般有缓存功能,端口一般为110、25
  • Telnet代理:主要用于telnet远程控制(黑客入侵计算机时常用语隐藏身份),端口一般为23
  • SOCKS代理:单纯传递数据包,不关心具体协议和用法,速度快,一般有缓存功能,端口一般为1080;SOCKS代理协议分为SOCKS4和SOCKS5,前者支持只TCP,后者支持TCP和UDP,还支持各种身份验证机制、服务端域名解析等

 

根据匿名程度区分:

  • 高度匿名代理:将数据包原封不动的转发,在服务端看来就真是是一个普通客户端在访问,记录的是代理服务器IP
  • 普通匿名代理:会在数据包上做一些改动,服务端上有何能发现这是个代理服务器,有一定几率追查到客户端真实IP;代理服务器通常会加入的HTTP头:HTTP_VIA、HTTP_X_FORWARDED_FOR
  • 透明代理:不但修改了数据包,还会告诉服务器客户端的真实IP;这种代理除了能用缓存技术提高浏览器速度、能用内容过滤提高安全性之外,五其他显著作用,最常见就是内网中硬件防火墙
  • 间谍代理:指组织或个人创建的用于记录用户传输的数据,然后进行研究、监控等目的的代理服务器

常见的代理设置

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

猜你喜欢

转载自www.cnblogs.com/Mr-chenshuai/p/9124998.html