Python网络蜘蛛:基础 - 代理的基本原理

Posted 街 三 仔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python网络蜘蛛:基础 - 代理的基本原理相关的知识,希望对你有一定的参考价值。

文章目录

代理的基本原理


在抓取数据的过程中经常会遇到这样的情况,一开始抓取数据是正常的,但是一杯茶的功夫就出现了错误,例如403 Forbidden。出现这种现象是因为网站采取了一些反爬虫的措施。

例如服务器会检测某个IP在单位时间内的请求次数,如果请求次数超过设定的阙值,就直接提供服务,并返回一些错误信息,可以称这种情况为封IP。

一种有效的解决方法就是使用代理进行伪装。

基本原理

设置代理服务器,就是在客户端和服务器之间搭建一座桥,此时客户端并非直接向Web服务器发起请求,而是把请求发送给代理服务器,然后由代理服务器把请求发送给Web服务器,Web服务器返回的响应也是由代理服务器发送给客户端。

这样客户端同样可以正常访问网页,而且这个过程中Web服务器识别出的真实IP就不再是客户端的IP了,成功实现了IP伪装,这就是代理的基本原理。

代理的作用

  • 突破自身IP的访问限制,访问一些平时不能访问的站点。
  • 访问一些单位或团体的内部咨源。
  • 提高访问速度。通常,代理服务器会设置一个较大的硬盘缓冲区,当有外界的信息通过时,会同时将其保存到自己的缓冲区中,当其他用户访问相同的信息时,直接从缓冲区中取出信息,提高了访问速度。
  • 隐藏真实IP。

代理分类

  • 根据协议区分
    • FTP代理服务器:主要用于访问FTP服务器上传、下裁以及缓存功能,端口一般为21、
      2121等。
    • HTTP代理服务器:主要用干访问网页,一船有内容过滤和缓存功能,端口一般为80、8080、3128等。
    • SSL/TLS代理:主要用于访问加密网站,一般有SSL或TLS加密功能(最高支持128位加密强度),端口一般为443。
    • RTSP代理:主要用于Realplayer访问Real流媒体服务器,一般有缓存功能,端口一般为554。
    • Telnet 代理:主要用于Telnet远程控制(黑客入侵计算机时常用于隐藏身份),端口一般为23。
    • POP3/SMTP 代理:主要用于以POP3/SMTP 方式收发邮件,一般有缓存功能,端口一般为110/25。
    • SOCKS 代理:只是单纯传递数据包,不关心具体协议和用法,所以速度快很多,一般有缓存功能,端口一般为1080。 SOCKS代埋协以又分为SOCKS4 和 SOCKS5,SOCKS4协议只支持TCP,,SOCKS5协议则支持TCP和 UDP,还支持合种身份验证机制、服务器端域名解析等。简单来说,SOCKS4能做到的SOCKS3郁能做到,但 SOCKS5 能做到的 SOCKS4不一定做得到。
  • 根据匿名程度区分
    • 高度匿名代理:高度匿名代理会将数据包原封不动地转发,在服务端看来似乎真的是一个普通客户端在访问,记录的IP则是代理服务器的IP。
    • 普通匿名代理:普通匿名代理会对数据包做一些改动,服务端可能会发现正在访问自己的是个代理服务器,并且有一定概率去追查客户端的真实IP。这里代理服务器通常会加入的HTTP头有HTTP_VIA和 HTTP_X_FORWARDED_FOR。
    • 透明代理:透明代理不但改动了数据包,还会告诉服务器客户端的真实IP。这种代理除了能用缓存技术提高浏览速度,用内容过滤提高安全性之外,并无其他显著作用,最常见的例子是内网中的硬件防火墙。
    • 间谍代理:间谍代理是由组织或个人创建的代理服务器,用于记录用户传输的数据,然后对记录的数据进行研究、监控等。

常见代理设置

  • 对于网上的免费代理,最好使用高度匿名代理,可以在使用前把所有代理都抓取下来筛选一下可用代理,也可以进一步维护一个代理池。
  • 使用付费代理服务。互联网上存在许多可以付费使用的代理商,质量要比免费代理好很多。
  • ADSL拨号,拨一次号换一次IP,稳定性高,也是一种比较有效的封锁解决方案。
  • 蜂窝代理,即用4G或5G网卡等制作的代理。由于用蜂窝网络作为代理的情形较少,因此整体被封锁的概率会较低,但搭建蜂窝代理的成本是较高的。

网络爬虫流程与注意事项

在写爬虫之前,还是需要了解一些爬虫的基础知识,如 HTTP 原理、网页的基础知识、爬虫的基本原理、Cookies 基本原理等。
网络蜘蛛是一个很形象的名字。如果把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过 网页的链接地址来寻找网页,从 网站某一个页面开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接 地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。
爬虫流程:
1、设置采集目标网站(主页)并获取网站数据。
2、当服务器无法访问时,按照指定的重试次数尝试重新下载页面。
3、在需要的时候设置用户代理或隐藏真实IP,否则可能无法访问页面。
4、对获取的页面进行必要的解码操作然后抓取出需要的信息。
5、在获取的页面中通过某种方式(如正则表达式)抽取出页面中的链接信息。
6、对链接进行进一步的处理(获取页面并重复上面的动作)。
7、 将有用的信息进行持久化以备后续的处理。
爬虫的解析与储存
1、解析
对于解析来说,对于 HTML 类型的页面来说,常用的解析方法其实无非那么几种,正则、XPath、CSS Selector,另外对于某些接口,常见的可能就是 JSON、XML 类型,使用对应的库进行处理即可。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以架尉♥信(同音):2028979958 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
这些规则和解析方法其实写起来是很繁琐的,如果我们要爬上万个网站,如果每个网站都去写对应的规则,那么不就太累了吗?所以智能解析便是一个需求。
智能解析意思就是说,如果能提供一个页面,算法可以自动来提取页面的标题、正文、日期等内容,同时把无用的信息给刨除,例如上图,这是 Safari 中自带的阅读模式自动解析的结果。
对于智能解析,下面分为四个方法进行了划分:
• readability 算法,这个算法定义了不同区块的不同标注集合,通过权重计算来得到最可能的区块位置。
• 疏密度判断,计算单位个数区块内的平均文本内容长度,根据疏密程度来大致区分。
• Scrapyly 自学习,是 Scrapy 开发的组件,指定⻚页⾯面和提取结果样例例,其可⾃自学习提取规则,提取其他同类⻚页⾯面。
• 深度学习,使⽤用深度学习来对解析位置进⾏行行有监督学习,需要⼤大量量标注数据。
如果能够容忍一定的错误率,可以使用智能解析来大大节省时间。
目前这部分内容我也还在探索中,准确率有待继续提高。
2、存储
存储,即选用合适的存储媒介来存储爬取到的结果,这里还是分为四种存储方式来进行介绍。
• 文件,如 JSON、CSV、TXT、图⽚、视频、⾳频等,常用的一些库有 csv、xlwt、json、pandas、pickle、python-docx 等。
• 数据库,分为关系型数据库、非关系型数据库,如 MySQL、MongoDB、HBase 等,常用的库有 pymysql、pymssql、redis-py、pymongo、py2neo、thrift。
• 搜索引擎,如 Solr、ElasticSearch 等,便于检索和实现⽂本匹配,常用的库有 elasticsearch、pysolr 等。
• 云存储,某些媒体文件可以存到如七⽜牛云、又拍云、阿里云、腾讯云、Amazon S3 等,常用的库有 qiniu、upyun、boto、azure-storage、google-cloud-storage 等。
这部分的关键在于和实际业务相结合,看看选用哪种方式更可以应对业务需求。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以架尉♥信(同音):2028979958 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
爬虫注意事项:
1、处理相对连接,有时我们从网页中获取的连接不是一个完整的绝对连接,而是一个相对连接,这种情况下将其URL后缀进行拼接( urllib.parse中的urljoin()函数可以完成此项操作 )
2、设置代理服务。有些网站会限制访问区域, 例如美国的Netflix屏蔽了很多国家的访问),有些爬虫需要隐藏自己的身份,在这 种情况下可以设置使用代理服务器,亿牛云爬虫代理一般稳定性和可用性都更好,可以通过urllib.request中的ProxyHandler来为请求设置代理。
3、限制下载速度, 如果我们的爬虫获取网页的速度过快,可能就会面临被封禁或者产生“损害动产”的风险(这个可能会导致吃官司且败诉),可以在两次下载之间添加延时从而对爬虫进行限速。
4、避免爬虫陷阱。 有些网站会动态生成页面内容,这会导致产生无限多的页面(例如在线万年历通常会有无穷无尽的链接)。可以通过记录到达当前页面经过了多少个链接(链接深度)来解决该问题,当达到事先设定的最大深度时爬虫就不再像队列中添加该网页中的链接了。

以上是关于Python网络蜘蛛:基础 - 代理的基本原理的主要内容,如果未能解决你的问题,请参考以下文章

爬虫基本原理代理

python网络爬虫进阶之HTTP原理,爬虫的基本原理,Cookies和代理介绍

代理的基本原理

代理的基本原理和作用

Python爬虫知识点——代理

代理服务器的基本工作原理