组-包含表,共35万新闻数据65图片信息_第1页
组-包含表,共35万新闻数据65图片信息_第2页
组-包含表,共35万新闻数据65图片信息_第3页
组-包含表,共35万新闻数据65图片信息_第4页
组-包含表,共35万新闻数据65图片信息_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

爬取今日头条&Solr展示

主讲:张桓毓

项目分析需求:爬取新闻信息Solr全文检索爬虫应用技术: Jsoup/HttpClient/多线程/分布式架构/RabbitMQ/Redis/BlockingQueue/SpringMVC/Spring/Mybatis/Mysql.....爬虫遍历策略:

广度优先√

深度优先

最佳优先连通图业务基本流程1.HttpClient/Jsoup请求分页信息Jsoup/JsonNode解析分页信息(动态/静态)2.Jsoup选择器解析页面Jsoup筛选标签JavaBean对象化3.持久化存储信息MYbatis静态请求数据库表设计1.text_area保存新闻标题,正文,id等信息2.text_image保存图片所属新闻id,图片信息,图片属性,等3.text_info保存点击率,收藏数,置顶时间,作者,关键字等十余条页面并没有显示的详细信息设计模式1.单线程爬虫2.多线程爬虫3.分布式多线程爬虫单线程爬虫单线程,自己请求分页信息,自己解析分页内包含的url缺点:慢,效率不高,容易被中断链接数据单击编辑标题爬取信息,持久化单击编辑标题单击编辑标题请求分页单击编辑标题分页解析分页多线程爬虫实现方法:线程池:ExecutorService线程复用1.CachedThreadPool 可重用线程池2.FixThreadPool 固定大小线程池3.ScheduledThreadPool 可延迟/可定期执行4.SingleThreadExecutor 单线程可复用BlockingQueue双缓冲队列内部使用两条队列,可允许两个线程同时向队列一个做存储,一个做取出操作。在保证并发安全的同时提高了队列的存取效率有界阻塞队列,如果队列为空,会等待队列加入新的元素再取出缺点:

还是慢231231解析页面信息单击编辑标题请求解析分页信息持久化数据库主线程分布式拒绝服务攻击DDOSHttpFlood洪水攻击SYN-ACK三次握手攻击主机肉机肉机肉机肉机肉机肉机肉机肉机肉机肉机肉机肉机目标服务器分布式多线程爬虫任务抽象*任务轮转服务器 1台爬虫任务执行&信息处理服务器 3台1.HttpClient请求1.Ajax--Json2.静态页面爬取2.Jsoup解析html3.JsonNode解析json分布信息暂储存数据库(可用Redis/RabbitMQ代替) 3台信息整合服务器 1台主数据库 1台部署图(爬虫集群部分)性能优化SpringAOP实现日志功能Redis校验重复rabbitMQ队列,队列的使用除去了接收和发送应用程序同时执行的要求。ExecutorService线程池(Executors.newFixedThreadPool(50))BlockingQueue双缓冲队列内部使用两条队列,可允许两个线程同时向队列一个做存储,一个做取出操作。在保证并发安全的同时提高了队列的存取效率。有界阻塞队列如果队列为空,还继续取数据,则会出现阻塞,直到队列中有数据为止JsonNode解析json代替ObjectMapper对象化缓存目标地址Ip异常递归try{}catch(xxxExceptione){i++if(i<5){方法名(原方法参数)

}}工作效率单线程爬虫:每秒钟3-5条,峰值20条左右多线程爬虫:(任务爬取与解析,任务执行)数据库连接数150每秒30条,峰值70条左右限制:数据库连接数有限,效率有瓶颈分布式多线程爬虫:(仅执行任务)三-四台机器,每台数据库连接数300,每台平均每秒60条理论爬取速度与爬虫业务执行服务器个数正相关两小时爬取今日头条30万大文本数据65万图片信息爬取策略1伪装策略2.任务发布策略3.信息分析策略伪装策略1.请求头伪装6种伪装模式2.分布式请求多台服务器同时请求3.递归请求请求失败再次请求4.浏览器伪装*HtmlUnit和PhantomJs5.IP伪装花生壳动态域名映射6.Cookie伪装---Jsoup解决登录/身份认证问题

服务器E

服务器D服务器B服务器A服务器C请求模式请求模式请求模式请求模式请求模式任务发布策略业务分析(最重要)任务抽象对象化任务轮转RobinHashCode具体业务分析爬虫信息深度解析策略需求:要更详细的信息传统爬虫获取新页面策略页面URL爬取Json解析策略Ajax请求解析

如何只爬取热点信息如何反向定位详细信息*****

根据新闻一个id反向查询Json详细信息(JT)

Json解析问题:主页面请求新数据重复率太高Json解析1.获取Json----模拟Ajax请求2.Json解析---JsonNode3.数据持久化Json解析一般的爬虫框架无法获取反向定位Json完全解析新闻详细信息实现策略:

策略1:解析JS获取Ajax返回参数---动态执行Js

策略2:模拟JS请求,模拟用户行为,获取Json模拟用户行为:

1.实现代码收藏全部新闻 2.实现代码模拟登录,获取收藏信息 3.解析收藏信息,获取全部Json进行封装javabean持久化目标数据分析Ajax请求Ajax请求链接请求体设置请求头解决403错误根据ajax返回响应获取全部收藏信息-----全面爬取新闻信息合计:36万条新闻+详细信息+65万图片信息四十三张表对应四十三种分类,平均每张8000条数据泛化爬虫业务需求:不仅可以爬今日头条,还可以爬其他网站难点:不同网站解析/伪装/任务分配策略不同不同持久层存储方式不同解决方案:抽象接口

伪装业务接口

解析策略接口

爬取模式接口模版设计模式泛化方法映射关系拦截器配置面向切面持久层接口(多数据库支持)业务封装解析策略伪装业务爬取模式伪装业务抽象接口爬取模式抽象接口解析策略抽象接口传统爬虫工具Heritrix基于java只能爬取静态html/htm页面Nutchapache开源基于java支持Hadoop可以爬取动态网页动态网页爬取是根据当前网页js处理后的信息进行分析1.x版本是基于Hadoop架构的,底层存储使用的是HDFS,而2.x通过使用ApacheGora,使得Nutch可以访问HBase、Accumulo、Cassandra、MySQL、DataFileAvroStore、AvroStore等NoSQL。HtmlUnit和PhantomJs伪装浏览器行为htmlUnit是java实现的类浏览器程序,包含在seleniumserver中,无须驱动,直接实例化就行。PhantomJS是一个基于WebKit(WebKit是一个开源的浏览器引擎,Chrome,Safari就是用的这个浏览器引擎)的服务器端JavaScriptAPI,主要应用场景是:无需浏览器的Web测试,页面访问自动化,屏幕捕获,网络监控爬虫框架WebCollector2*1)自定义遍历策略,可完成更为复杂的遍历业务,例如分页、AJAX*2)内置BerkeleyDB管理URL,可以处理更大量级的网页(嵌入式数据库,维护图型结构)*3)集成selenium,可以对javascript生成信息进行抽取*4)直接支持多代理随机切换*5)集成springjdbc和mysqlconnection,方便数据持久化*6)集成json解析器*7)使用slf4j作为日志门面*8)修改http请求接口,用户自定义http请求更加方便WebCollector框架自带了多线程和URL维护,用户在编写爬虫时无需考虑线程池、URL去重和断点爬取的问题。WebCollector目前有单机版和Hadoop版(WebCollector-Hadoop)Solr全文检索前端展示Solr+Luncene全文检索1.关键字检索2.热度/点击率/置顶时间/发布时间/收藏数量爬取结果检索3.数据分析4.竞价排名部署图(全文检索部分)部署图(全局)搜索界面如下图:ApacheSolr实现全文检索热词搜索搜索结果如下图:相关词搜索点击量竞价排名相关词Echarts实现ECharts的展示

ECharts,缩写来自EnterpriseCharts,商业级数据图表,提供可交互,可高度个性化定制的数据可视化图表。支持折线图、柱状图、散点图、K线图、饼图、雷达图、和弦图、力导向布局图、地图、仪表盘、漏斗图、事件河流图等12类图表,同时提供标题,详情气泡、图例、值域、数据区域、时间轴、工具箱等7个可交互组件,支持多图表、组件的联动和混搭展现。

ECharts的图表在jsp页面中新建<script>标签引入echarts.js<!--引入echarts.js--><scriptsrc="/js/echarts.min.js"></script><scriptsrc="/js/echarts.js"></script>ECharts的图表

<script>标签内动态加载echarts和所需图表,回调函数中可以初始化图表并驱动图表的生成

<scripttype="text/javascript">//初始化echarts实例varmyChart=echarts.init(document.getElementById('main'));//指定图表的配置项和数据

option={series:[{ name:'板块分布',

type:'pie',radius:'55%',center:['50%','60%'],

data:[//后台传来的json{value:....,name:....}....],};//使用刚指定的配置项和数据显示图表myChart.setOption(option);</script>ApacheSolr实现竞价排名

如果想在solr实现像百度一样相似的竟价的排名,也是可以的,在solr中实现竟价排名,主要使用ponent组件通过配置关键字和相应的ID,就可以把指定的文档放到最前面案例:搜索关键词“中国”,把下图中对应新闻排在首位。实现效果如图:ApacheSolr实现竞价排名

ponent组件,如何配置?solrconfig.xml配置:<ponentname="elevator"class="ponent"><strname="queryFieldType">string</str><strname="config-file">elevate.xml</str></ponent>elevate.xml配置:要竞价的文档通过配置文件elevate.xml进行设置,将文件放在solr/conf下<?xmlversion="1.0"enc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论