MiseringThread.java 解析页面线程

http://injavawetrust.iteye.com

  1. package com.iteye.injavawetrust.miner;
  2.  
  3. import java.util.Set;
  4.  
  5. import org.apache.commons.logging.Log;
  6. import org.apache.commons.logging.LogFactory;
  7.  
  8. /**
  9. * 解析页面线程
  10. * @author InJavaWeTrust
  11. *
  12. */
  13. public class MiseringThread extends Thread {
  14.  
  15. private static final Log LOG = LogFactory.getLog(MiseringThread.class);
  16.  
  17. private MinerConfig config = null;
  18.  
  19. public MiseringThread(MinerConfig config) {
  20. this.config = config;
  21. }
  22.  
  23. @Override
  24. public void run() {
  25. while (!MinerMonitorThread.done) {
  26. misering();
  27. }
  28. }
  29.  
  30. private synchronized void misering() {
  31. Html html = MinerQueue.waitingMiseringPoll(); // 等待提取URL的分析页面出队列
  32. if (null == html || MinerUtil.isBlank(html.getHtml())) {
  33. return;
  34. }
  35. //当前页面深度<爬取深度 取出当前页面全部URL
  36. if (html.getDepth() < config.getMaxDepth()) {
  37. LOG.info("MiseringThread获取页面[" + html.getUrl() + "]下所有URL。。。。。。 当前线程 [" + Thread.currentThread().getName() + "]");
  38. Set<String> urls = MinerUtil.getAllUrl(html.getUrl());
  39. for(String url : urls){
  40. if(null == url || url.equals("")){
  41. continue;
  42. }
  43. if(url.substring(url.length() - 1, url.length()).equals("/")){
  44. url = url.substring(0, url.length() - 1);
  45. }
  46.  
  47. MinerUrl minerUrl = new MinerUrl();
  48. minerUrl.setUrl(url);
  49. minerUrl.setDepth(html.getDepth() + 1); // 爬取深度+1
  50. // 判断URL列表是否包含关键字
  51. if(!MinerUtil.checkKeys(url, config.getKeys())){
  52. continue;
  53. }
  54. // 添加到待访问队列,每个URL只访问一次
  55. MinerQueue.addUnVisited(minerUrl);
  56. // 将页面URL 添加到URL队列 保证每个URL只访问一次
  57. MinerQueue.addUrlSet(minerUrl.getUrl());
  58. }
  59. }
  60. }
  61.  
  62. }

返回列表

MiseringThread.java 解析页面线程的更多相关文章

  1. MinerUrl.java 解析页面后存储URL类

    MinerUrl.java 解析页面后存储URL类 package com.iteye.injavawetrust.miner; /** * 解析页面后存储URL类 * @author InJavaW ...

  2. MinerHtmlThread.java 爬取页面线程

    MinerHtmlThread.java 爬取页面线程 package com.iteye.injavawetrust.miner; import org.apache.commons.logging ...

  3. Java笔试题-线程编程方面

      Ja 线程编程方面 60.java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现R ...

  4. Java并发编程——线程池的使用

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  5. paip.powerdesign cdm pdm文件 代码生成器 java web 页面 实现

    paip.powerdesign cdm pdm文件 代码生成器 java web 页面 实现 准备从pd cdm生成java web 页面...但是,ms无直接地生成软件.... 只好自己解析cdm ...

  6. Java并发编程:线程和进程的创建(转)

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  7. Java解析word文档

    背景 在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档. 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率 ...

  8. java获取request中的参数、java解析URL问号后的参数

    java获取request中的参数.java解析URL问号后的参数.有时候我们需要从request中获取参数,或者获取拼接在Url后面的参数,有时候一个一个去拿有点麻烦,一起拿出来放在一个map里面需 ...

  9. Java并发包——线程池

    Java并发包——线程池 摘要:本文主要学习了Java并发包中的线程池. 部分内容来自以下博客: https://www.cnblogs.com/dolphin0520/p/3932921.html ...

随机推荐

  1. Oracle中SQL语句分类

    Oracle中SQL语句分类如下:1.DML语句 insert/delete/update/select/merge/explan plan/lock table2.DDL语句 create/atlt ...

  2. ACM Piggy Bank

    Problem Description Before ACM can do anything, a budget must be prepared and the necessary financia ...

  3. git > 2.3 实现同步盘的功能

    话不多说,简单粗暴 http://stackoverflow.com/questions/35643201/how-to-set-up-a-sychronous-directory-in-remote ...

  4. Java web文件上传下载

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52048666 作者:朱培 ID:sdksdk0 邮 ...

  5. 用Python最原始的函数模拟eval函数的浮点数运算功能(2)

    这应该是我编程以来完成的难度最大的一个函数了.因为可能存在的情况非常多,需要设计合理的参数来控制解析流程.经验概要: 1.大胆假设一些子功能能够实现,看能否建立整个框架.如果在假设的基础上都无法建立, ...

  6. PGM:无向图模型:马尔可夫网

    http://blog.csdn.net/pipisorry/article/details/52489321 马尔可夫网 马尔可夫网在计算机视觉领域通常称为马尔可夫随机场(Markov random ...

  7. 使用DWR实现自动补全 类似百度搜索框的自动显示效果

    使用DWR实现自动补全 自动补全:是指用户在文本框中输入前几个字母或汉字的时候,自动在存放数据的文件或数据库中将所有以这些字母或汉字开头的数据提示给用户供用户选择 在日常上网过程中,我们经常使用搜索引 ...

  8. Spring之Enterprise JavaBeans (EJB) integration

    原文地址:需要FQ https://translate.google.com/translate?hl=zh-CN&sl=zh-CN&tl=zh-CN&u=http%3A%2F ...

  9. Dynamics CRM2016 New features in Microsoft Dynamics CRM Online 2015 Update 1 are now available

    很多人看过Dynamics CRM Online 2015 Update 1后,被它新的一个界面风格所吸引,还有它的很多新增功能,虽然官网放出了些补丁,但最重要的Server补丁一直没出,包括我在内很 ...

  10. window.open 打开子窗口,关闭所有的子窗口

    需求:通过window.open方法打开了子窗口,当关闭主窗口时,子窗口应当也关闭. 实现思路: 1.打开子窗口函数window.open(url,winName)的第二个参数winName可以唯一标 ...