爬虫技术的善恶与反爬虫技术
本书的目标读者是那些在网上看了人家用爬虫干了很多事,也想要学习爬虫且不仅仅陷入去爬MM图片这种程度,想要深入了解爬虫这种技术的读者.这书很适合在看各种教程之前看,大体上说了很多有关爬虫的最基本的知识.大概有个一两万字,看完应该不会很花时间.这书里不涉及具体代码以及逻辑.
前段时间参加了一场 Python 网络爬虫主题的分享活动,主要以直播的形式分享了我从事网络爬虫相关研究以来的一些经验总结。整个分享分为三个阶段,第一阶段先介绍了自己从大学以来从事编程开发以来的相关历程,第二阶段是正式的网络爬虫分享流程,详细总结了网络爬虫开发的一些要点,第三阶段是解答一些提问,并抽奖送出一些礼品。所以在这里我会对我昨天分享的主要内容做下总结,希望大家可以支持!
本小节开始介绍之前多次提到过的消息队列。再讲之前,问大家各问题.你们遇到过有些时候,爬虫有很大一部分时间抓取解析模块是空闲的情况么?我猜应该大多数都遇到过.产生这个现象的原因就在于写入数据库的时间比起抓取解析的时间要慢的多.所以就开始出现了性能瓶颈.通过分析,是写入数据库的性能跟不上抓取解析的性能.那么怎么样才能让两边的速率达成平衡呢?
该节我们来讲讲爬虫中的一个难点,并发.并发是什么,并发即同时启动多个进程/线程来运行所给予的任务.那进程/线程又有都是什么呢?我们来简单的介绍一下.进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。
经过了前面几个小节的操作,现在我们手里已经有了爬虫.可以为我们爬取成堆的数据了,所以到了最后一步,是时候找个地方存放起来了,不然的话,数据就没法分析,数据本身的价值也就没了.而数据库作为当今最主要的数据存储工具,自然我们得了解一下.数据库是一种按照数据结构来组织、存储和管理数据的仓库.可以分成SQL数据库和NOSQL数据库.
从上一章节中,我们得知我们现在已经得到了链接,下面我们就可以通过GET/POST方式发送请求,得到目标网站的回应.然后根据返回的资源格式的不同,分门别类的采取对应措施来解析取的数据.绝大多数都是业界主流的html格式还有就是前面章节里提到的JSON。首先我们来说说html.HTML作为如今网页的基础,为互联网发展做出了巨大的贡献.一般我们用来解析HTML是通过DOM来解析的.
从本章开始,我们来讲讲爬虫的优化.不知道你有没有遇到这种情况,那就是别人的一天能上百万数量级还都是优质数据,而同等配置的你的爬虫一天只有十几万而且质量还是参差不齐呢?那就是你没有还好的优化爬虫.在追求爬虫的极致性能的今天,如何优化爬虫都将是爬虫爱好者们面对的重要问题。那么,从现在开始,我们将逐步的从起始出发,一步步的为爬虫更好的爬取信息而努力.
这一节介绍一下通过JSON进行前后端交互的爬取技巧和一些我个人觉得挺有意思的反爬措施.JSON交互的话,基本就是通过ajax动态加载技术将后台传回的数据通过js渲染的方式放进网页中.由服务端发送一个ajax请求,然后根据后台配置返回相应的JSON数据来进行动态渲染.如果网站是这么运行的,那么页面就无需重新加载整个网页就可以对网页的某部分进行更新。
从这一小节开始,我们开始了解常用的几个反爬手段.首先是封禁类.我们经常会遇到爬取过度而导致IP被封或者是账号被封。你知道是怎么一回事么? 在这里,我们将详细的了解下我们在什么情况下会遭到此类惩罚。同时,一些常用的判断规则又是什么?一般来说,我们如果触发了反爬系统所设定的条件的话,就会引发封禁.
本章节将开始讲述那些厂商为何确保自己的利益是怎么样进行反爬的.实话说,与对方的反爬措施做斗争可以称得上开发过程中为数不多的趣味了,同样也可以说是一种折磨了.你会见到各种奇妙无比,匪夷所思,令人拍案叫绝的反爬手段。同时你还得绞尽脑汁的去绕过这些.在前面的章节中,我们提到爬虫是我们获取互联网信息的一种重要手段,那么有矛必有盾.
本节主要介绍了市面上大多数的反爬手段..
该小节会从定义和用途上介绍一下搜索引擎爬虫.搜索引擎爬虫在整体用途中算少数.它主要是看robot.txt来获取页面的信息.然后尽可能快的,深的挖掘出互联网中的所有链接.按照前面所说,该类爬虫分为批量型,增量型和垂直型三类.批量型此类爬虫有比较明确的抓取范围和目标,当爬虫达到这个设定的目标后,即停止抓取过程.
本节主要介绍了爬虫可以承担的一些工作
一转眼进这家公司也快一年多了,总想写点什么来记录一下最近学到的不少.毕竟,学习的最后一节是输出.既然这样,我也就琢磨着写一点自己对于爬虫的一些了解和知道的一些技巧,知识有限,文章还是挺短的,大概只有一万多字,看的话,不会费多长时间.希望大家能在学爬虫之前先来看看此书.我相信会对大家的爬虫之路有帮助的.
本节主要介绍了写作动机然后表达了一下我对爬虫的一些看法.
本节主要介绍了在遇到性能瓶颈的时候,我们有什么办法来解决
从上一章我们知道,获取链接是爬虫工作的第一步.除去我们事先给与的链接外,大部分链接都要靠通过挖掘现有的链接得到,而网上的网页很多是重复的,过期的和没有参考性的。那么,我们如何在爬取过程中避免出现这些情况呢?我们可以通过地址去重来避免抓取的重复页面,然后通过价值算法来提升优质链接的优先级来避免抓取到无参考性的和过期的页面.首先我们来说下地址去重。
本节主要介绍了怎么样才能提高爬虫的效率.
这一小节重点介绍两个利器phantomjs和selenium.通过利用这些工具可以破解本地JS环境的反爬措施.本地JS环境是个杀器,可以通杀没有本地环境的任意爬虫.其原理是因为浏览器自带有引擎,引擎中包含有js运行环境.
关注时代Java