您的位置:新闻资讯 >文章内容
java如何做网络爬虫?要注意什么?
来源:互联网 作者:admin 时间:2018-12-20 16:53:25

  很多语言都可以编写爬虫,其中最常用的是python,但python的具体实现基本是固定好的,我们无法了解底层的实现,这也就导致很多网站都可以反爬虫,那么使用java爬虫怎样呢?java如何做网络爬虫?要注意什么?


  一、java如何做网络爬虫


  一般爬虫流程主要步骤可以总结发起请求、获取响应内容、解析响应内容、保存数据,总结来一些参考下面流程图。


java如何做网络爬虫?要注意什么?


  二、java编写网络爬虫要注意什么


  1.爬行策略


  一般包括深度优先爬行策略、广度优先爬行策略、大站优先策略、反链策略等,这里就不多做说明,一般都采用深度优先爬行策略。


  2.页面解析技术


  用的比较多的比如正则表达式解析,jsoup解析器,Selenium等,正则表示式和jSelenium这里就不多做介绍了,jsoup是一款开源Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。jsoup可以从包括字符串、URL地址以及本地文件来加载HTML文档,并生成Document对象实例,通过DOM对象来解析获取需求数据。


  3.URL处理


  包括URL的解析,URL选取,URL存储,URL调度等,爬虫首先有一个目标网站等URL,从目标URL中爬取页面内容解析需要等URL,并对URL根据特定对规则进行赛选并存储在URL队列中,根据制定对策略进行URL调度爬取网页内容。


  这里主要介绍一些URL存储和调度,由于爬虫系统一般都是分布式的,存储上选取高性能的缓存数据库redis,存储和读取数据非常高效,且支持的数据类型丰富,采用list和set两种数据结构结合来存储URL并可以设定优先级顺序,在调度时根据设定的优先级顺序来获取redis存储对象拿到URL进行依次调度爬取网页内容。


  在URL调度时,还需要对请求响应的结果进行管理,同样存储到Redis中,记录为响应成功的URL队列和处理异常的URL队列,后续看调度策略再对异常的URL队列进行处理。


  4.数据存储


  即对爬取到的有效数据进行存储入库,一般比较常用的是HBase和Mysql。对于网络爬虫来说,一般都是爬取的特定数据,具有一定形态的数据,一般都可以用关系型数据库来进行存储,本文就选取Mysql来介绍爬虫的数据存储。


  对于分布式的爬虫系统,写入数据操作一般都是高并发,如果直接写库对数据库压力太大,很容易造成IO阻塞。一般解决办法是用缓存来辅助,先把数据存到缓存中,然后在同步到数据库,由于并发较大,对缓存要求也比较高。


  另一个办法可以使用消息队列来做缓冲,写入数据先进消息队列,然后在入库,并对数据库做一定对分表设计,来降低数据库并发压力。


相关文章内容简介
在线咨询
微信公众号

微信公众号

回到顶部