热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

爬虫套路知多少?反爬策略是关键

作者|奇猫来源|51CTO爬虫是获取数据的一种方式,网络上很多请求都是由爬虫发起的。说几个爬虫的实际例子:①想要做舆论分析,分析当前热点话

作者 | 奇猫

来源 | 51CTO

爬虫是获取数据的一种方式,网络上很多请求都是由爬虫发起的。


640?wx_fmt=jpeg


说几个爬虫的实际例子:


①想要做舆论分析,分析当前热点话题,可以爬取腾讯新闻,微博,今日头条等主流站点数据,然后进行分析;

②想要做电影推荐或影评分析,可以爬取豆瓣,猫眼等数据进行分析;

③想要做电商销售分析,可以爬取京东,淘宝商家数据进行分析;

640?wx_fmt=gif

当我们使用高并发或者分布式爬虫对这些站点进行抓取时,可能会损害站点利益:

①短时间内大量请求占用站点资源:网络带宽,服务器负载;

②如果我们获取数据,自己获益,可能会损害他人利益;


但是百度,谷歌等搜索引擎厂商无时无刻不在抓取信息,还有很多其他企业和个人也在抓取自己感兴趣信息。如何保护自己利益不受侵犯,企业从制定行业规范与技术两方面做了处理,这也是我们这节主要内容:

640?wx_fmt=gif

1.robots协议:爬虫规范;

2.常见反爬机制;

3.反爬机制应对方式;

640?wx_fmt=jpeg


<1>

robots协议


robots协议是一个文本文件&#xff0c;通过协议声明站点的哪些信息可以抓取&#xff0c;哪些禁止抓取。


robots协议位置&#xff1a;http://xxxx/robots.txt ;例如&#xff1a;百度https://www.baidu.com/robots.txt &#xff0c;内容如下&#xff1a;


User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/ User-agent: Googlebot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
... ...
User-agent: *
Disallow: /

robots协议相关说明如下&#xff1a;


640?wx_fmt&#61;png

我们来简单分析下百度的robots.txt


①User-agent&#xff1a;Baiduspider&#xff0c; Googlebot...是针对的搜索引擎

②Disallow&#xff1a;/baidu&#xff0c;/s?...禁止这些搜索引擎爬取相应的资源

③User-agent: * Disallow: /&#xff1a;禁止其他搜索引擎爬取任何资源&#xff0c;以上列出的除外&#xff1b;


如果搜索引擎类型没有在百度的robots.txt声明中&#xff0c;禁止该引擎抓取本站的任何资源。


<2>

反爬虫策略与应对方式


robots协议定义了行业规范&#xff0c;但是很多开发者还是会进行暴力爬取&#xff0c;增加服务器负载&#xff0c;占用网络带宽&#xff0c;这就需要制定反爬策略&#xff0c;主要方式有下面几种&#xff1a;

①判断User-Agent&#xff0c;是否为浏览器&#xff1b;

②判断短时间内同一个IP访问次数&#xff1b;

③用户登录后才能访问资源&#xff1b;

④短时间用户使用不同IP访问资源&#xff0c;异常登录&#xff1b;

⑤验证码&#xff0c;滑动点击验证&#xff1b;

⑥数据加解密处理&#xff1b;

对于不同反爬策略&#xff0c;可以使用不同应对方式&#xff1a;


①User-Agent&#xff1a;发起请求时候添加头信息&#xff0c;伪装浏览器&#xff1b;

②短时间内访问次数限制&#xff1a;可以使用代理或者延时爬取&#xff1b;

③登录后访问&#xff1a;模拟登录保存COOKIE,请求时添加COOKIE信息&#xff1b;

④异常登录&#xff1a;准备大量账号&#xff0c;绑定不同代理进行爬取&#xff1b;

⑤验证码&#xff1a;使用Ocr&#xff0c;机器学习进行处理&#xff0c;但是准确率是一个问题&#xff1b;

⑥数据加解密处理&#xff1a;使用对应算法进行破解&#xff0c;或者使用selenium进行抓取&#xff1b;


本文主要解决User-Agent与短时间内访问次数限制。


<3>

例子&#xff1a;伪装浏览器


我们来看一个例子&#xff0c;使用浏览器访问某主页&#xff1a;http://www.xicidaili.com/ &#xff1b;能够正常访问&#xff1b;然后使用urllib请求g该主页&#xff0c;代码如下&#xff1a;


from urllib import request
url&#61; &#39;http://www.xicidaili.com/&#39;
req &#61; request.urlopen(url)
print(req.code)

运行出错&#xff0c;结果如下&#xff1a;

查看浏览器请求头信息与User-Agent&#xff1a;


640?wx_fmt&#61;jpeg

当我们使用urllib请求该主页&#xff0c;服务器检查User-Agent&#xff0c;认为这次请求不是浏览器请求&#xff0c;所以拒绝访问&#xff1b;我们可以在访问时添加请求头信息设置User-Agent&#xff0c;代码实现如下&#xff1a;


from urllib import request
#user-agent
headers &#61; {&#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36&#39;}
url&#61; &#39;http://www.xicidaili.com/&#39;
#创建Request对象&#xff0c;添加user-agent,伪装浏览器
reqhd &#61; request.Request(url&#61;url, headers&#61;headers)
req &#61; request.urlopen(reqhd)
print(req.code)

输出结果&#xff1a;200。至此&#xff0c;我们成功解决第一个反爬问题。

  • 小红书&#xff0c;“黄”了

  • 苹果谷歌双双被曝&#xff0c;你的手机正在窃听你的生活

  • 遇事不决赖毛子&#xff0c;美国这次打算封杀变脸APP

640?wx_fmt&#61;png



推荐阅读
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 快速掌握Tomcat 8.5.40的配置与应用技巧 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • CSS3 @font-face 字体应用技术解析与实践
    在Web前端开发中,HTML教程和CSS3的结合使得网页设计更加多样化。长期以来,Web设计师受限于“web-safe”字体的选择。然而,CSS3中的`@font-face`规则允许从服务器端加载自定义字体,极大地丰富了网页的视觉效果。通过这一技术,设计师可以自由选择和使用各种字体,提升用户体验和页面美观度。本文将深入解析`@font-face`的实现原理,并提供实际应用案例,帮助开发者更好地掌握这一强大工具。 ... [详细]
  • Kafka 是由 Apache 软件基金会开发的高性能分布式消息系统,支持高吞吐量的发布和订阅功能,主要使用 Scala 和 Java 编写。本文将深入解析 Kafka 的安装与配置过程,为程序员提供详尽的操作指南,涵盖从环境准备到集群搭建的每一个关键步骤。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
author-avatar
安徒生笔下苍老了谁1_120
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有