关注我,持续分享逻辑思维&管理思维; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;
有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》《做好面试准备,迎接2024金三银四》。
推荐热榜内容:《架构实战--以海量存储系统讲解热门话题:分布式概念》
-------------------------------------正文----------------------------------------
博主曾在某大型搜索引擎公司工作过。知道很多网站,其实不喜欢爬虫,因为爬虫一般情况下不会带来收益(大型搜索引擎通过用户搜索,可以带来流量;但小搜索引擎,很多时候只爬内容,并不能带来流量),因此,很多网站会有反爬机制。主要包括以下几种:
- 基于用户请求的Headers反爬。网站通过检查访问请求中的User-Agent和Referer字段来识别爬虫。例如,一些资源网站会检测Referer以防止盗链。
爬虫可以通过修改或添加这些字段来绕过检测。博主上一篇博文《C#实战分享--爬虫的基础原理及实现》代码里也有提到这个知识点。并使用C#告诉大家如何设置User-Agent。 - 基于用户行为的反爬。这包括检测短时间内多次访问同一页面或账号的行为。例如,有些网站会限制同一账号在短时间内重复访问的次数。
爬虫可以通过使用不同的IP地址来模拟不同的用户行为,或者通过增加访问请求之间的间隔时间来绕过这些限制。博主上篇文章的代码里,也有设置每个请求间sleep时间。另外,有时爬虫不一定要全站抓取,如博主上一篇博文《C#实战分享--爬虫的基础原理及实现》里提到,我们一般情况下,只抓取http://xx.com/content/*.html 某一种或几种规则的URL,这样也能减轻对目标网站的压力,从而避免被封禁。
- 动态页面的反爬。一些网站的数据是通过AJAX请求或JAVA等后端动态生成的,这使得爬取变得更加困难。爬虫需要识别这些动态加载的内容,并找到合适的方法来获取这些信息。
这里一般编程语言都有模拟浏览器获取内容的库,如Python的requests库是一个简洁而优雅的HTTP库,它可以用来发送HTTP/1.1请求。通过requests库可以轻松地发送Ajax请求,并获取到响应内容。requests库支持多种HTTP认证方式、代理、Cookies等功能。
一般这种库也会比较重,能支持的并发量不高。大家可以根据自己使用的编程语言自行搜索了解。或关注博主私聊沟通。 - 设置robots.txt文件。网站可以通过在robots.txt文件中设置Disallow指令来阻止爬虫访问某些页面或整个网站。虽然这可以防止一些爬虫,但大型搜索引擎通常会遵守这些规则。
嗯,这里也说了大型搜索引擎会遵守。大家如果只是学习,可以忽略这个规则。但不建议用来干坏事哟。 - 使用验证码。验证码是一种区分人类用户和自动爬虫的方法。爬虫通常无法解决这些验证码,因此可以有效地阻止爬虫访问。
但一般网站并不会每次请求内容都要输入验证码。总体来说,IP足够多,或请求足够慢,还是可以应对这类反爬的。当然,如果你技术足够牛逼,破解验证码也不是不行。但早期的验证码一般通过图像识别技术就可以破解。当前很多知名网站的验证码都比较难破解了。
- 欺骗机制。这包括设置“蜜罐”(专门针对爬虫的陷阱URL)、在响应中掺入假数据或生成大量垃圾URL来阻塞爬虫的任务队列。
这种在博主的代码里还好。博主只针对规则内的URL才会放到等爬取队列中,其他垃圾URL直接丢弃。好处是可以解决这类问题。坏处是可能会丢失一些内容。但实测发现大部分想要的内容还是能抓取下来的。 - 对于大型搜索引擎,有些和网站主会有合作协议,网站主主动推送内容到搜索引擎,这样,也就不用爬取了,当然,这不在今天的讨论之列。
以上就是本次分享的内容。如果有兴趣的,欢迎关注博主私聊。
博主其它经典原创:《管理心得--工作目标应该是解决业务问题,而非感动自己》,《管理心得--如何高效进行跨部门合作》,《管理心得--员工最容易犯的错误:以错误去掩盖错误》,《技术心得--如何成为优秀的架构师》、《管理心得--如何成为优秀的架构师》、《管理心理--程序员如何选择职业赛道》。欢迎大家阅读。
评论记录:
回复评论: