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

NewsUtil.java

 package org.news.util;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 抓取新闻内容的辅助类
* @author geenkDC
* @time 2015-07-28 15:15:04
*/
public class NewsUtil {
/**
* 通过提交的URL来抓取出新闻的链接
* @param url
* @return
* @throws Exception
*/
public static ArrayList<String> findUrlByUrl(String url) throws Exception
{
URL url0=new URL(url);
ArrayList<String> urlList=new ArrayList<String>();
URLConnection con;
BufferedReader br=null;
try {
con = url0.openConnection();
InputStream in=con.getInputStream();
br=new BufferedReader(new InputStreamReader(in));
String str="";
while((str=br.readLine())!=null)
{
urlList.addAll(findUrl(str));
}
} catch (IOException e) {
throw new RuntimeException("URL读写错误:"+e.getMessage());
}
if(br!=null)
{
try {
br.close();
} catch (IOException e) {
throw new RuntimeException("URL流关闭异常:"+e.getMessage());
}
}
return urlList;
} /**抓取新闻URL的真正实现类
* @param str
* @return
*/
public static ArrayList<String> findUrl(String str)
{
ArrayList<String> urlList=new ArrayList<String>();
//匹配新闻的URL
String regex="http://[a-zA-Z0-9_\\.:\\d/?=&%]+\\.jhtml";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
//找符合正则匹配的字串
while(m.find())
{
String subStr=m.group().substring(m.group().lastIndexOf("/")+1, m.group().lastIndexOf(".jhtml")); try {
if (subStr.matches("[0-9]*")) {
urlList.add(m.group()); }
} catch (Exception e) {
throw new RuntimeException("匹配新闻URL出错:"+e.getMessage());
}
}
return urlList;
} /**
* 根据URL找到其的新闻内容
* @param url
* @return
* @throws Exception
*/
public static ArrayList<String> findContentByUrl(String url) throws Exception {
URL url1=new URL(url);
ArrayList<String> conList=new ArrayList<String>();
URLConnection con;
BufferedReader br=null;
try {
con = url1.openConnection();
InputStream in=con.getInputStream();
InputStreamReader isr=new InputStreamReader(in, "utf-8");
br=new BufferedReader(isr);
String str="";
StringBuffer sb=new StringBuffer();
while((str=br.readLine())!=null)
{
sb.append(str);
}
conList.addAll(findContent(sb.toString()));
} catch (IOException e) {
throw new RuntimeException("URL读写错误:"+e.getMessage());
}
if(br!=null)
{
try {
br.close();
} catch (IOException e) {
throw new RuntimeException("URL流关闭异常:"+e.getMessage());
}
}
return conList;
} /**
* 抓取新闻内容的真正实现类
* @param str
* @return
*/
public static ArrayList<String> findContent(String str) {
ArrayList<String> strList=new ArrayList<String>();
//匹配新闻内容div
String regex="<div class=\"con_box\">([\\s\\S]*)</div>([\\s\\S]*)<div class=\"left_con\">";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
//找符合正则匹配的字串
while(m.find())
{
try {
strList.add(new String(m.group()));
} catch (Exception e) {
throw new RuntimeException("抓取新闻内容出错:"+e.getMessage());
}
}
return strList;
}
}

功能简单说明:

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

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

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

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

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

    网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...

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

    现实生活中咱们常常在浏览网页时看到自己需要的信息,但由于信息过于庞大而又不能逐个保存下来. 接下来,咱们就以获取邮箱地址为例,使用java语言抓取网页中的邮箱地址 实现思路如下: 1.使用Java.n ...

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

    相信很多同人和我一样,想去官网下载一份纯英文的java API文档,可使sun公司的网站让我实在很头疼,很乱,全是英文!所以就在网上下载了别人提供的下载!可是还是不甘心!其实多去看看这些英文的技术网站 ...

  5. java网页抓取

    网页抓取就是,我们想要从别人的网站上得到我们想要的,也算是窃取了,有的网站就对这个网页抓取就做了限制,比如百度 直接进入正题 //要抓取的网页地址 String urlStr = "http ...

  6. Java数据抓取经验【转载】

    本人担任职友集的java工程师五年,其中抓取数据占主要的一部分,抓取的信息只要有两部分,职位和简历,其中职位的抓取量为日均插入量为30万,更新量 为60万,抓取全国300多个人才网站.职友集(现在改名 ...

  7. 【java】抓取页面内容,提取链接(此方法可以http get无需账号密码的请求)

    package 网络编程; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileOutpu ...

  8. java爬虫抓取腾讯漫画评论

    package com.eteclab.wodm.utils; import java.io.BufferedWriter; import java.io.File; import java.io.F ...

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

    package 抓取网页; import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream; ...

随机推荐

  1. ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片

    这里请注意,在编译ffmpeg时,不要使用--disable-devices选项. 使用 --enable-encoder=rawvideo --enable-decoder=rawvideo 启用r ...

  2. Android平台程序崩溃的类型及原因列举

    Android平台程序崩溃大家都应该遇到过,force close和ANR应该是大家遇到较多的. 这里把Android平台程序崩溃的各种类型做一个简述和原因列举. 1.ANR(可见ANR): 发生场景 ...

  3. gtid

    GTID的全称为 global transaction identifier,可以翻译为全局事务标示符,GTID在原始master上的事务提交时被创建.GTID需要在全局的主-备拓扑结构中保持唯一性, ...

  4. DevExpress GridView属性设置 z

    本文主要总结控件的属性设置,附上图片,给大家一个参考.后续会给大家分享功能实现和使用的小技巧. GirdControl是数据的容器,它包含多种显示方式,GridView则是一种二维表格视图. 绑定数据 ...

  5. Matlab编程实例(1) 移动平均

    MATLAB数字信号处理作业,把自己写的程序发上来..欢迎交流~ QQ 五幺九七九零六四   首先是任意点移动平均: 主程序:mov_average_main.m (运行) 函数:mov_averag ...

  6. mysql DDL语句

    sql语言分为三个级别. 1.ddl 语句 ,数据定义语句,定义了数据库.表.索引等对象的定义.常用语句包含:create.drop.alter. 2.dml 语句 ,数据操纵语句,用于添加.删除.更 ...

  7. 2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治

    链接:https://nanti.jisuanke.com/t/11217 奉上官方题解: 枚举 d(x , y , z) 中的 y,把 y 从这个图中删去,再求这时的全源最短路即可,使用 Floyd ...

  8. bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割

    平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割  找到最小环(即最短路)极为所求,注意辅助边的建立 加入读入优化  不过时间还是一般  估计是dij写的不好   大神勿喷~~~ /*** ...

  9. Qt Style Sheets制作UI特效

    使用Qt Style Sheets制作UI特效  博客出处:http://developer.nokia.com/community/wiki/%E4%BD%BF%E7%94%A8Qt_Style_S ...

  10. wireshark http过程

    一直研究lighttpd源码,顺便看下网络编程,不说太多,开始吧 第一步 设置wireshark过滤规则 tcp.port eq 81 ,然后开始捕捉 第二步  http://183.61.16.16 ...