01-Java爬虫
一.java爬虫常用的基础框架
HttpClient:用于请求网络发送http请求
Jsoup:用于解析网页
二.webmagic框架
1.webmagic 是java的一个爬虫框架,底层是httpclient 和jsoup;
webmagic 四大组件:
downloader:下载器组件,从互联网下载html页面,并封装成Page对象,传递给PageProcess组件,底层是HttpClient实现。
pageProcesser:爬虫的核心组件,必须自定义
Site对象:站点参数的配置:抓取的间隔时间,超时时间,代理,编码格式,重试次数,添加header等
Page对象:Html:Downloader组件抓取的页面封装成的Html对象;
Selectable对象转化成字符串:
toString()、get():如果是列表的话,只取第一个元素
all():可以把Selectable转化成字符串,转换成一个List<String>
links():取当前节点中所有的链接地址
nodes():返回一个List<Selectable>对象
pipeline:负责存储持久化解析的数据
框架默认提供三个实现
ConsolePipeline:框架默认使用,向控制台输出
FilePipeline:向磁盘输出,可以把抓取到的结果保存到磁盘
JsonFilePipeline:向磁盘输出保存到json数据
scheduler:维护的待爬去的url列表
url队列
实现方法:
QueueScheduler:java内存队列(默认使用)
FileCacheQueueScheduler:使用文件做缓存的队列
RedisSechduler:使用redis做队列,解决分布式爬虫问题
向队列中添加url时去重
1) 使用java中的hashset去重(默认使用)
2) 使用redis的set去重
3) 使用布隆过滤器去重
有点:速度快
缺点:可能未去重
布隆过滤器使用方法:
1) 创建一个QueryScheduler对象
2) 创建一个布隆过滤器的对象
3) 给Scheduler设置布隆过滤器
4) 布隆过滤器需要guava支持
2.Spider 工具类
初始化爬虫,装配各个组件,同时设置参数
三.定时器
1.Timer:java中的定时器,功能简单
2.Quartz:定时框架,功能强大,使用繁琐
3.@Scheduled:SpringBoot中使用的定时器
a.底层也是Quartz
步骤:1).在SpringBoot的引导类中添加@EnableScheduling
2).在需要使用的方法上添加@Scheduled,支持cron表达式
@Scheduled常用属性:
fixedDelay:固定延迟,固定延迟多长时间执行,long类型
fixedDelayString:固定延迟执行,同fixedDelay,数据类型是String类型
fixedRate:固定周期执行
fixedRateString:固定周期执行,同fixedRateString,数据类型是String类型
复杂周期执行应该使用cron表达式
cron在线表达式生成:http://cron.qqe2.com/
四.代理的使用
1.应用场景
防止服务器识别出爬虫,封停ip
2.两个免费代理ip的服务器网站:
米扑代理:https://proxy.mimvp.com/free.php
西刺代理:http://www.xicidaili.com
3.再webmagic中使用代理,在downloader中设置
downloader = new HttpClientDownloader();
SimpleProxyProvider proxyProvider = SimpleProxyProvider.from(new Proxy("140.143.152.93", 1080),
new Proxy("140.143.152.93", 1080),
new Proxy("140.143.152.93", 1080),
new Proxy("140.143.152.93", 1080)
);
downloader.setProxyProvider(proxyProvider);
五.selenium+无头浏览器
1.selenium:前段测试框架:能通过代码控制浏览器
有java、.net、python、node.js 等各个版本
2.无头浏览器:没有图像的浏览器
phantomjs:无头浏览器
普通浏览器的的无头浏览模式:
chrome
firefox
edge
Last updated
Was this helpful?