Java爬虫知识概括

Java爬虫知识概括

  • JAVA爬虫
  • webmagic

JAVA爬虫

简介:

  • 网络爬虫,即Web Spider,是一个很形象的名字。
  • 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。
  • 网络蜘蛛是通过网页的链接地址来寻找网页的。
  • 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。
  • 如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。
  • 这样看来,网络爬虫就是一个爬行程序,一个抓取网页的程序。
  • 网络爬虫的基本操作是抓取网页。
  • 爬虫原理:我们一般访问网页时,都会把html源码下载到本地,因此我们就可以模拟网页的请求方式,将得到的html源码以流的形式写入缓存,然后再通过正则表达式或者其他方法进行数据匹配,进而得到我们想要的数据。

所用到的工具类:

  • URL:打开网页链接,即执行访问url的功能
  • URLConnection:获取访问后下载的html源代码
  • Pattern:java支持正则表达式的类
  • Matcher:执行正则表达式的匹配

入门步骤:

  • 首先用java搞爬虫,当然得学好java的基础咯,什么循环/顺序/条件这是基础中的基础,还有多线程,IO(同步/异步/阻塞/非阻塞)等等都不能落下。
  • 然后是爬虫的基础,HttpClient(现在应该叫HttpComponents了)是java里最常用的下载类库,最好要熟悉,可以的话去深入一下HTTP协议,如果精力实在不够,了解最基本的HTTP流程和常见的Status Code也ok;
  • 另外就是对html/js都要了解一些,还要了解xml/json,不能对你要爬的内容结构都不熟悉,要用上那些解析工具类库,什么jackson,gson,xrece,jsoup等等喜欢哪个用哪个,没有主次好坏之分;还有一个处理文本常用的正则表达式,这个最好要非常熟悉,很多时候html里面的文本表面上看没有结构化的形式,不过正则表达式往往能让你眼前一亮,最后要用好chrome/firefox这类浏览器和它们带的调试工具,能取到事半功倍的效果。
  • 基本上这些技能点点完了你也可以抓到很多静态或者动态站点的数据了。

进阶步骤:

  • 常遇到访问微博/贴吧/论坛等一些站点需要用户登录才能看到数据,想要抓到它们的数据,就需要模拟用户登录,这点网上也有不少相关资料了,基本上都是获取到相应的c1ookie,在接下来的请求中带上这个授权的cookie就ok了,如果实在复杂,就只能考虑用phantomjs或者chrome no headless这类无GUI的浏览器模拟登录获取数据。
  • 反爬,经常遇到站点提示输入验证码,或者访问频繁等等,其实站点设计者都不想这种没有意义的访问产生,消耗他们的资源,所以有爬虫,也就有反爬。应对反爬需要看反爬站点的反爬策略,根据对方的反爬策略针对性的采取应对措施,一般都是加代理,控制访问频率,设置身份验证的cookie等等,无非这些。
  • 识别算法,现代站点数量越来越多,不可能总一个个站点去专门开发爬虫,这得耗费多少人力物力,都是程序猿最宝贵的就是时间。站点一般都有分类,新闻/论坛/视频/直播等等,每一类站点都有自己相应的特点,新闻类站点的特点比较明显,每一个新闻站点都很类似,都是有长文本出现在html和相应的dom结构树上,所以就出现了一些通用的抽取算法,用来抽取新闻数据,感兴趣的可以看看,目前这类算法有不少,识别率和正确率都相对较好,而对于论坛类和其他站点的抽取算法目前还没有太多成熟可以大规模使用的,有兴趣的可以去查找相应的论文看看

高级步骤:

  • 爬完数据后都需要处理/分析,不然抓了数据也是白抓,难道就是想感觉下爆站的快感,那还不如直接ddos人家来的快不是(千万不要这么干),数据量少的话我们可以存放到一些关系型数据库,像MySQL/PostgreSQL等,
  • 但是有一天我们的数据量会越积越多,然后我们会发现,原来的关系型数据库到了亿级别数据量(甚至可能更少)就完全hold不住了,这个时候我们就要考虑到我们要怎么存储我们的数据了,是扩展原来的关系存储,还是迁移到NoSQL数据库上,是持久化,还是放到MQ(消息队列)里面实时处理掉,这些都要根据实际业务场景去应用,可以去了解下相关的可能的存储方案。
  • 另外业务系统大了,很多时候不能等到爬虫任务跑完才发现问题,比如站点改版了,哪个网站又加强反爬了,这就要我们及时作出反应,最好上个日志系统,实时分析数据,现在的ELK是标配了。

为什么不用 Java 写爬虫,而要用 Python?

  • Java实现网络爬虫的代码要比Python多很多,而且实现相对复杂一些。
  • Java对于爬虫的相关库也有,但是没有Python那么多。

webmagic

webmagic的主要特色:

  • 完全模块化的设计,强大的可扩展性。
  • 核心简单但是涵盖爬虫的全部流程,灵活而强大,也是学习爬虫入门的好材料。
  • 提供丰富的抽取页面API。
  • 无配置,但是可通过POJO+注解形式实现一个爬虫。
  • 支持多线程。
  • 支持分布式。
  • 支持爬取js动态渲染的页面。
  • 无框架依赖,可以灵活的嵌入到项目中去。

你可能感兴趣的:(JavaSE,java)