java实现抓取某公司官网新闻

  这里先说一下,实习期的一个项目,当时并没有该合作公司的获取新闻的接口,但是项目又急着上线,所以总监就让我来做一个简单的抓取,现将主要的工具类NewsUtil.java贴出来供大家参考。

NewsUtil.java

  1 package org.news.util;
  2
  3 import java.io.BufferedReader;
  4 import java.io.IOException;
  5 import java.io.InputStream;
  6 import java.io.InputStreamReader;
  7 import java.net.URL;
  8 import java.net.URLConnection;
  9 import java.util.ArrayList;
 10 import java.util.regex.Matcher;
 11 import java.util.regex.Pattern;
 12
 13 /**
 14  * 抓取新闻内容的辅助类
 15  * @author geenkDC
 16  * @time 2015-07-28 15:15:04
 17  */
 18 public class NewsUtil {
 19     /**
 20      * 通过提交的URL来抓取出新闻的链接
 21      * @param url
 22      * @return
 23      * @throws Exception
 24      */
 25     public static ArrayList<String> findUrlByUrl(String url) throws Exception
 26     {
 27         URL url0=new URL(url);
 28         ArrayList<String> urlList=new ArrayList<String>();
 29         URLConnection con;
 30         BufferedReader br=null;
 31         try {
 32             con = url0.openConnection();
 33             InputStream in=con.getInputStream();
 34             br=new BufferedReader(new InputStreamReader(in));
 35             String str="";
 36             while((str=br.readLine())!=null)
 37             {
 38                 urlList.addAll(findUrl(str));
 39             }
 40         } catch (IOException e) {
 41             throw new RuntimeException("URL读写错误:"+e.getMessage());
 42         }
 43         if(br!=null)
 44         {
 45             try {
 46                 br.close();
 47             } catch (IOException e) {
 48                 throw new RuntimeException("URL流关闭异常:"+e.getMessage());
 49             }
 50         }
 51         return urlList;
 52     }
 53
 54     /**抓取新闻URL的真正实现类
 55      * @param str
 56      * @return
 57      */
 58     public static ArrayList<String> findUrl(String str)
 59     {
 60         ArrayList<String> urlList=new ArrayList<String>();
 61         //匹配新闻的URL
 62         String regex="http://[a-zA-Z0-9_\\.:\\d/?=&%]+\\.jhtml";
 63         Pattern p=Pattern.compile(regex);
 64         Matcher m=p.matcher(str);
 65         //找符合正则匹配的字串
 66         while(m.find())
 67         {
 68             String subStr=m.group().substring(m.group().lastIndexOf("/")+1, m.group().lastIndexOf(".jhtml"));
 69
 70             try {
 71                 if (subStr.matches("[0-9]*")) {
 72                     urlList.add(m.group());
 73
 74                 }
 75             } catch (Exception e) {
 76                 throw new RuntimeException("匹配新闻URL出错:"+e.getMessage());
 77             }
 78         }
 79         return urlList;
 80     }
 81
 82     /**
 83      * 根据URL找到其的新闻内容
 84      * @param url
 85      * @return
 86      * @throws Exception
 87      */
 88     public static ArrayList<String> findContentByUrl(String url) throws Exception {
 89         URL url1=new URL(url);
 90         ArrayList<String> conList=new ArrayList<String>();
 91         URLConnection con;
 92         BufferedReader br=null;
 93         try {
 94             con = url1.openConnection();
 95             InputStream in=con.getInputStream();
 96             InputStreamReader isr=new InputStreamReader(in, "utf-8");
 97             br=new BufferedReader(isr);
 98             String str="";
 99             StringBuffer sb=new StringBuffer();
100             while((str=br.readLine())!=null)
101             {
102                 sb.append(str);
103             }
104             conList.addAll(findContent(sb.toString()));
105         } catch (IOException e) {
106             throw new RuntimeException("URL读写错误:"+e.getMessage());
107         }
108         if(br!=null)
109         {
110             try {
111                 br.close();
112             } catch (IOException e) {
113                 throw new RuntimeException("URL流关闭异常:"+e.getMessage());
114             }
115         }
116         return conList;
117     }
118
119     /**
120      * 抓取新闻内容的真正实现类
121      * @param str
122      * @return
123      */
124     public static ArrayList<String> findContent(String str) {
125         ArrayList<String> strList=new ArrayList<String>();
126         //匹配新闻内容div
127         String regex="<div class=\"con_box\">([\\s\\S]*)</div>([\\s\\S]*)<div class=\"left_con\">";
128         Pattern p=Pattern.compile(regex);
129         Matcher m=p.matcher(str);
130         //找符合正则匹配的字串
131         while(m.find())
132         {
133             try {
134                 strList.add(new String(m.group()));
135             } catch (Exception e) {
136                 throw new RuntimeException("抓取新闻内容出错:"+e.getMessage());
137             }
138         }
139         return strList;
140     }
141 }

功能简单说明:

  只要输入网站首页的url,程序会自动获取匹配的新闻条目的url,再根据每个新闻条目的url抓取该新闻的左右内容。

时间: 2024-10-26 09:49:06

java实现抓取某公司官网新闻的相关文章

如何从sun公司官网下载java API文档(转载)

相信很多同人和我一样,想去官网下载一份纯英文的java API文档,可使sun公司的网站让我实在很头疼,很乱,全是英文!所以就在网上下载了别人提供的下载!可是还是不甘心!其实多去看看这些英文的技术网站很有好处!去官网下载的东西感觉也很好! 所以: 1.进入官网http://www.oracle.com/technetwork/java/index.html 2.Oracle主页 -> download下拉菜单里找到Java for development -> 按ctrl+F搜索Java SE

iOS—网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据

网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一片文章已经介绍我们可以使用两个方式来抓取网络数据实现网络爬虫,并且大致介绍了一下怎么使用正则表达式去实现数据的抓取 由于笔者曾经学过一段时间java和android相关的技术,今天就讲讲怎么使用java去抓取网络数据,关于Python有机会等笔者好好研究一下再来分享,但其实会一种就可以,除非你的需求

iOS开发——网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据

网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一片文章已经介绍我们可以使用两个方式来抓取网络数据实现网络爬虫,并且大致介绍了一下怎么使用正则表达式去实现数据的抓取 由于笔者曾经学过一段时间java和android相关的技术,今天就讲讲怎么使用java去抓取网络数据,关于Python有机会等笔者好好研究一下再来分享,但其实会一种就可以,除非你的需求

如何使用JAVA语言抓取某个网页中的邮箱地址

现实生活中咱们常常在浏览网页时看到自己需要的信息,但由于信息过于庞大而又不能逐个保存下来. 接下来,咱们就以获取邮箱地址为例,使用java语言抓取网页中的邮箱地址 实现思路如下: 1.使用Java.net.URL对象,绑定网络上某一个网页的地址 2.通过java.net.URL对象的openConnection()方法获得一个URLConnection对象 3.通过URLConnection对象的getInputStream()方法获得该网络文件的输入流对象InputStream 4.循环读取流

怎样用java编程抓取动态生成的网页

最近在做项目的时候有一个需求:从网页面抓取数据,要求是首先抓取整个网页的html源码(后期更新要使用到).刚开始一看这个简单,然后就稀里哗啦的敲起了代码(在这之前使用过Hadoop平台的分布式爬虫框架Nutch,使用起来是很方便,但是最后因为速度的原因放弃了,但生成的统计信息在后来的抓取中使用到了),很快holder.html和finance.html页面成功下载完成,然后解析完holder.html页面之后再解析finance.html,然后很沮丧的发现在这个页面中我需要的数据并没有在html

走过路过不要错过~java语言抓取网页想要的内容

学习了正则之后,打算用java玩一玩,所以就决定用它来实现一个好玩的idea import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; //和网络相关的操作 import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.

网络爬虫Java实现抓取网页内容

package 抓取网页; import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream; import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.comm

python爬取银行名称和官网地址

爬取所有银行的银行名称和官网地址(如果没有官网就忽略),并写入数据库.目标网址:http://www.cbrc.gov.cn/chinese/jrjg/index.html(因为此网站做了反爬虫机制,所以这里需要我们将爬虫伪装浏览器进行访问.)关于爬虫伪装成浏览器访问可以参考这篇文章:https://blog.csdn.net/a877415861/article/details/79468878 话不多说直接上代码: import re from urllib import request f

Java HttpURLConnection 抓取网页内容 解析gzip格式输入流数据并转换为String格式字符串

最近GFW为了刷存在感,搞得大家是头晕眼花,修改hosts 几乎成了每日必备工作. 索性写了一个小程序,给办公室的同事们分享,其中有个内容 就是抓取网络上的hosts,废了一些周折. 我是在一个博客上抓取的.但是这位朋友的博客应该是在做防盗链,但他的方式比较简单就是5位数的一个整形随机数.这里折腾一下就ok了. 要命的是他这个链接的流类型 居然是gzip.这个郁闷好久,一直以为是编码格式导致解析不出来结果,后来发现是gzip搞的. 主要的一段代码做个记录吧. 1 /** 2 * 网络工具类 用于