博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬!扒@切#存$构%查
阅读量:6166 次
发布时间:2019-06-21

本文共 5233 字,大约阅读时间需要 17 分钟。

    喜欢java主要是喜欢它的简单,一次调用的背后是许多开发者默默的付出,讨厌java主要是讨厌它的简单,一次调用的背后完全不知道系统私下里都干了些啥。计算机技术经历几十年发展,底层的东西日趋完善,后来人在前辈的基础上快速构建,把产品推向市场,反馈迭代再反馈再迭代,变现盈利才是王道。当下有些强业务型互联网企业重融资重逼格,满嘴设计模式数据结构算法大全,闭口不谈运营模式产品形态用户体验~!@#$%^&*()......

    爬是爬虫,网页爬取,爬网页是技术活有难度有挑战,有些站点不喜欢被爬,爬烦了容易被拉黑,有些页面不是静态的,来来回回多步交互才能完成爬取,有些站点需要验证登录,各种形式验证码考验人脑眼手配合更别提机器识别了。

​​    
org.apache.httpcomponents
fluent-hc
4.5.3
String html = Executor.newInstance() .execute(Request.Get("http://www.url.com") // 目标地址 .userAgent("Mozilla/5.0 Chrome/85.0.252.101 Safari/536.86") // 浏览器UA .viaProxy("127.0.0.1:2017") // 代理服务 .connectTimeout(5000) // 连接超时 .socketTimeout(10000)) // 套接字超时 .returnContent() // 返回CT对象 .asString(Charset.forName("UTF-8")); // 设置字符集
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    扒是扒取HTML网页标签提取有价值内容,虽然每个站点都遵循html规范,但标签的定义差别还是非常大的,如果是有针对性的爬取某几家站点,可以通过配置的方式定义标签从而在元素集合中快速定位到信息。

     切是切分对中文文章或语句进行分词,每个单词由偏移、词性和词三部分构成一个item对象,所有对象构成一个集合通过迭代器可以遍历,用户可以添加自己的字典,也可以指定切分过滤策略,扩展性很不错,调用仅一行代码,返回一个容器。

org.ansj
ansj_seg
5.0.0
// 未指定策略切分 Result rst = ToAnalysis.parse(article); // 初始化用户字典 UserDefineLibrary.insertWord("网络", "n", 1000); // 指定词性过滤分词 FilterRecognition flt = new FilterRecognition(); flt.insertStopNatures("w"); Result rst = ToAnalysis.parse(article).recognition(flt);
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

     存是指将数据保存起来,mongodb作为类结构化存储解决方案高效稳定分布式相当好用,对数据类型和长度没有传统关系型数据库定义时那么费劲上心,很容易就能满足入门级建库建表的要求,一般复杂性的操作都能满足,用过绝对爱不释手。

org.mongodb
mongo-java-driver
3.0.2
GtMongo tm = new GtMongo(); Gt.TuMongoOpen("127.0.0.1",12345); Gt.TuMongoGetDatabase("my_mongodb"); Gt.TuMongoGetCollection("my_collecttion"); Gt.TuMongoInsert( new Document("title, "一带一路高峰时刻") .append("url", "http://www.yidaiyilu.com") .append("text", "一带一路”国际合作高峰论坛举行") ...... .append("keys","一带一路") );
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    构是构建索引,依托elk(Elasticsearch、Logstash和Kibana)日志分析系统,特点是分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载,开源的伸缩性好,玩的好不好全看自己水平高低了。

org.elasticsearch.client
transport
5.1.1
try { String now = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + "T" + new SimpleDateFormat("HH:mm:ss.SS+0800").format(new Date()); TransportClient tc = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(TE_HOST, TE_PORT))); String jsn[] = { "{\"@time\":\"" + now + "\",\"data\":{\"area\":\"area1\",\"msg\":\"msg1\",\"uid\":\"111\",\"keys\":\"key1\"}}", "{\"@time\":\"" + now + "\",\"data\":{\"area\":\"area2\",\"msg\":\"msg2\",\"uid\":\"222\",\"keys\":\"key2\"}}", "{\"@time\":\"" + now + "\",\"data\":{\"area\":\"area3\",\"msg\":\"msg3\",\"uid\":\"333\",\"keys\":\"key3\"}}" }; for (int i = 0; i < jsn.length; i ++) { IndexResponse ir = tc.prepareIndex(TE_NAME, TE_TYPE).setSource(jsn[i]).get(); System.out.println(ir.getId() + ", " + ir.getType() + ", " + ir.getIndex()); } tc.close(); } catch (Exception e) { e.printStackTrace(); }
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    查是查询,上面说了,自动发现自动创建,逻辑处理不复杂的话上手十分简单,但对中文的处理和复杂逻辑搜索还是需要花点功夫研究下的。

try {		Settings st = Settings.builder().put("cluster.name", "elasticsearch").put("node.name", "kafka").build();		TransportClient tc = new PreBuiltTransportClient(st).addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(TE_HOST, TE_PORT)));//		SearchResponse sr = tc.prepareSearch("logstash-*").get();																	// 全量数据//		SearchResponse sr = tc.prepareSearch("logstash-*").setQuery(QueryBuilders.matchQuery("uid", "111")).get();					// 指定字段//		SearchResponse sr = tc.prepareSearch("logstash-*").setQuery(QueryBuilders.regexpQuery("area", ".*1")).get();			// 正则表达//		SearchResponse sr = tc.prepareSearch("logstash-*").setQuery(QueryBuilders.wildcardQuery("area", "*e*")).get();				// 通配符号				QueryBuilder qb = QueryBuilders.boolQuery()			.must(QueryBuilders.termQuery("area", "area1"))			.must(QueryBuilders.regexpQuery("keys", "k.*"))			.mustNot(QueryBuilders.termQuery("uid", "xyz"));		SearchResponse sr = tc.prepareSearch("logstash-*").setQuery(qb).get();				SearchHits sh = sr.getHits();		System.out.println("共搜到: " + sh.getTotalHits() + "条结果!");				for(SearchHit ht : sh){			System.out.println(ht.getSourceAsString());		}				tc.close();	} catch (Exception e) {		System.out.println("共搜到: 0条结果!");		e.printStackTrace();	}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    关于“爬!扒@切#存$构%查”的话题就这么多,抛砖引玉蜻蜓点水,总之入门十分简单,深钻还是有一定难度的。每个模块花不了几行就能实现最初级的功能,java能成为最广泛的应用开发语言确实是有它显著优势的,虽说有些开发语言随着某个领域的突破会快速发展壮大,但java和c、c++还将长期存在,保持强大的生命力。

转载地址:http://iyyba.baihongyu.com/

你可能感兴趣的文章
Jenkins持续集成环境部署
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
图解SSH原理及两种登录方法
查看>>
查询个人站点的文章、分类和标签查询
查看>>