一个简单的Java网络爬虫实现思路

什么是网络爬虫

 

百度百科上定义为自动抓取信息的程序或脚本。在实际生产环境中,爬虫可以按照抓取方式分为通用爬虫聚焦爬虫。常见的比如搜索引擎(比如百度,Google)这类抓取网页的爬虫,这类爬虫主要是抓取各类网站和网页的URL地址和信息,这一类爬虫也叫做通用爬虫。而针对一个特定网站的爬虫叫做聚焦爬虫。而规模上又可以分为单体爬虫和分布式爬虫。

       当然从其他角度来说爬虫也可以分为批量型、增量型、垂直型网络爬虫。这里主要是描述一下聚焦爬虫的实现思路。作为个人开发者,这种类型的爬虫使用频率很高,比较灵活,开发和维护起来也比较简单。实现语言也是多种多样,常见的比如Python,Java,Go等。

 

工作流程

需要处理的问

1.IP被拉黑

1.抓取代理ip/购买代理服务,做成代理池,使用不同的ip、来发送请求

2.对请求进行休眠,如果是单线程爬虫,可以在每次请求之前进行一段时间(一般是几秒钟)的休眠

3.定时爬取,比如每次抓一部分数据,定时多久执行一次,避免频繁请求接口

2.单线程爬取速度太慢

使用线程池来进行多线程爬取,但是爬取的时候需要注意业务逻辑的先后顺序,多线程批量抓取之后的回调问题。以及多线程导致的数据库连接池连接数不够用的问题,还有多线程下IP可能因为频繁请求被网站服务器拉黑的问题。也可以做成分布式爬虫来提高爬取速度。

框架选择

如果只是做一个很基础的爬虫框架(比如爬取豆瓣热门电影影评),就可以根据传统web项目简化一下。这里列举一下我开发Java爬虫时常用的架构。

SpringBoot系列(项目主体框架,热部署,mvc,定时任务等模块) + SpringDataJPA(存储数据) + Jsoup(解析HTML页面) + Hutool(工具类类库) + Guava(扩展集合,多线程) + HttpClient(处理复杂请求)

还有一些比较成熟的爬虫框架:

Crawler4jWebMagicWebCollectorNutch(这个并不适用于小爬虫)

法律问题

数据是财产,法律保障财产安全。所以在抓取数据之前搞清楚你要抓的网站是否可以抓取,或者抓到的数据可以用在哪些方面(一般是不能商用,也不能用来牟利)。

这里就需要提一 robots协议 了,网站可以通过robots协议来告诉搜索引擎什么页面可以抓取,什么页面不可以抓取。不过这个协议并不是法律规定,而是互联网界一个规范。通常是在网站的根目录下面,名为 robots.txt的文件。文件写法可以参考百度百科。

Robots协议-百度百科

爬虫常用策略算法

坑太多,后续再填..

并行爬取时任务分派算法和高可用算法(hash)

网页去重算法(布隆过滤器)

广度优先策略

深度优先策略

反向连接数策略

Partial PageRank策略

5OPIC策略策略

大站优先策略

 

参考文章

https://www.cnblogs.com/mafeng/p/5651323.html

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值