做项目时,并没有合作公司的获取新闻的接口,但是项目又急着上线,所以总监就让我来做一个简单的抓取,现将主要的工具类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. BNU 4188 Superprime Rib【BFS】

    题意:给出n,输出n位超级质数,超级质数的定义为“依次去掉右边一位后仍然为质数的数” 因为一个n位质数去掉右边一位数之后仍然为质数,说明它是由n-1位超级质数演变而来的, 同理,n-1位超级质数也由n ...

  2. 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-c ...

  3. HDU 5284 wyh2000 and a string problem(字符串,水)

    题意:比如给你一个串,要求判断wyh是不是它的子序列,那么你只需要找一个w,找一个y,再找一个h,使得w在y前面,y在h前面即可.有一天小学生拿着一个串问他“wyh是不是这个串的子序列?”.但是wyh ...

  4. Android Configuration change引发的问题及解决方法(转)

    之前在学习Fragment和总结Android异步操作的时候会在很多blog中看到对Configuration Change的讨论,以前做的项目都是固定竖屏的,所以对横竖屏切换以及横竖屏切换对程序有什 ...

  5. 利用nginx+lua+memcache实现灰度发布

    一.灰度发布原理说明 灰度发布在百度百科中解释: 灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式.AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什 ...

  6. 锋利的jQuery读书笔记---选择器

    前段时间入手了锋利的jQuery(第二版),想着加强下自己的js能力,可前段时间一只在熟悉Spring和Hibernate.最近抽时间开始读这本书了,随便也做了些记录. 读书的过程是边看边代码测试,所 ...

  7. [Everyday Mathematics]20150113

    设 $f\in C^2(0,+\infty)$ 适合 $$\bex \lim_{x\to 0^+}f'(x)=-\infty,\quad \lim_{x\to 0^+}f''(x)=+\infty. ...

  8. 转载:看c++ primer 学习心得

    学习C++ Primer时遇到的问题及解释 chenm91 感觉: l          啰嗦有时会掩盖主题:这本书确实有些啰嗦,比如在讲函数重载的时候,讲了太长一大段(有两节是打了*号的,看还是不看 ...

  9. 测试xss和xsf

    xss注入攻击: 123123123 被动注入: 1231231231231231 主动注入: 对不起,你需要登录才能评论 用户名 密码

  10. ORA-12162: TNS:net service name is incorrectly specified

    今天在进行修改oracle_sid环境变量的时候,将相关的环境变量值去掉,从而不能进入sqlplus,报错如下: [oracle@kel ~]$ sqlplus / as sysdba SQL*Plu ...