# 快速启动
风铃虫实例主要有以下两种构建方式
# 通过风铃虫对象创建(推荐)
RequestCache requestCache = new RedisRequestCache(redisTemplate);
Scheduler redisScheduler = new RedisScheduler( redisTemplate);
// crawlerRule 是一个风铃虫规则对象
Crawler crawler =
// 创建规则实例
Crawler.create(crawlerRule)
// 自定义请求缓存器
.setRequestCache(requestCache)
// 自定义资源调度器
.setScheduler(redisScheduler)
// 数据输出器
.setPipeline(new CustomPipeline())
// 事件监听器
.setCrawlerListener(crawlerListener)
// 状态监听器
.setStatuObserver(new CustomCrawlerObsrver(crawlerRule.getCode()))
//设置别名
.setName(crawlerInfo.getCode());
//.setDownloader(downloader)
//.setDownloader(new SeleniumDownloader("C:\\Users\\yishui\\Desktop\\geckodriver\\win32.exe"))
//.setDownloader(new SeleniumDownloader("/home/yishui/user.sh"))
# 通过构建器创建
// 创建一个提取属性规则
// 该提取规则标识XPATH表示使用XPATH提取器进行提取,
// 该XPATH提取器的XPATH表达式为 //h1/text() , 该提取提取器的作用顺序是0
ExtractFieldRule extractFieldRule = new ExtractFieldRule(Rule.XPATH, "//h1/text()", "", 0);
// 创建一个提取项
ExtractRule extractRule = new ExtractRule();
extractRule
// 提取项代码,不能为空,同一组提取规则之内每一个提取项的编码必须唯一
.setCode("code")
// 提取项名字,可以不设置
.setName("加密电子货币名字")
// 设置提取属性规则
.setRules(Arrays.asList(extractFieldRule));
// 创建一个风铃虫实例
Crawler crawler = CrawlerBuilder.create()
// 风铃虫的起始链接
.startUrl("https://hk.finance.yahoo.com/cryptocurrencies")
// 风铃虫会将请求到的网页中的URL先全部提取出来
// 然后将匹配链接提取规则的链接过滤出来,放入请求池中
// 请求池中的链接会作为下次抓取请求的种子链接
// 可以以添加多个链接提取规则,多个规则之间是并列(或连接)的关系
// 如果不设置则表示提取链接中所有包含域名关键字(例如此例中的yahoo)的链接放入链接池
// 此例中表示符合该正则表达式的链接都会被提取出来
.addLinkRule(new MatcherRule(Pattern.REGEX, "https://hk.finance.yahoo.com/quote/.+"))
// 内容页地址规则是告诉风铃虫哪些页面是内容页
// 对于复杂情况下,可以与 内容匹配规则 配合使用
// 只有符合内容页规则的页面才会被提取数据
// 对于非内容页,风铃虫不会尝试从中提取数据
// 此例中表示符合该正则表达式的网页都是内容页,风铃虫会从这些页面里提取数据
.contentPageRule(new MatcherRule(Pattern.REGEX, "https://hk.finance.yahoo.com/quote/.+"))
// 风铃虫可以设置多个提取项,这里为了演示只设置了一个提取项
// 增加一个提取项规则
.addExtractRule(extractRule)
// 请求间隔时间
// 如果不设置则使用默认时间10秒,此值是为了防止抓取频率太高被服务器封杀
.interval(3000)// 每次进行爬取时的平均间隔时间,单位为毫秒,
.creatCrawler();
// 启动爬虫实例
crawler.start();
无论是哪种构建方法,生成一个风铃虫的最基础的提供信息必须包含以下两种:
- 风铃虫的起始链接
- 至少一个内容提取项信息
在风铃虫启动成功后,每个风铃虫都会具有一个唯一的随机的名字,用于分辨风铃虫,获取方法如下
crawler.getName()
在风铃虫实例启动后,禁止进行修改属性的操作,否则可能会导致风铃虫运行异常
# 重要概念
链接提取规则
告诉风铃虫从下载的网页内容里提出哪些链接,因为下载的网页内容里包含有很多的链接,但并不是每个链接都是使用者需要抓取的,例如每个网站里的友情链接和备案链接一般情况下都是需要排除抓取的,使用者可以利用链接提取规则来排除这部分链接,使之不加入到抓取任务之中。
一般来说,链接提取规则用来告诉风铃虫哪些页面是内容页和列表页
内容解析规则
告诉风铃虫从哪些网页里提取数据信息。不是每个网页里都包含有需要提取的数据,例如你需要提取的数据包含在内容页里,如果你在列表页里去提取这些数据,很有可能提取失败,也会浪费服务器的计算资源。因此,用户可以简单地认为内容页规则就是告诉风铃虫那些网页时内容页,需要从里面提取出数据,哪些网页不是内容页,不需要从里面提取出数据。
一般来说,内容解析规则用来告诉风铃虫哪些页面是内容页