做项目时,并没有合作公司的获取新闻的接口,但是项目又急着上线,所以总监就让我来做一个简单的抓取,现将主要的工具类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实现抓取某公司官网新闻的更多相关文章
-
iOS—网络实用技术OC篇&;网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
-
iOS开发——网络实用技术OC篇&;网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
-
如何使用JAVA语言抓取某个网页中的邮箱地址
现实生活中咱们常常在浏览网页时看到自己需要的信息,但由于信息过于庞大而又不能逐个保存下来. 接下来,咱们就以获取邮箱地址为例,使用java语言抓取网页中的邮箱地址 实现思路如下: 1.使用Java.n ...
-
如何从sun公司官网下载java API文档(转载)
相信很多同人和我一样,想去官网下载一份纯英文的java API文档,可使sun公司的网站让我实在很头疼,很乱,全是英文!所以就在网上下载了别人提供的下载!可是还是不甘心!其实多去看看这些英文的技术网站 ...
-
java网页抓取
网页抓取就是,我们想要从别人的网站上得到我们想要的,也算是窃取了,有的网站就对这个网页抓取就做了限制,比如百度 直接进入正题 //要抓取的网页地址 String urlStr = "http ...
-
Java数据抓取经验【转载】
本人担任职友集的java工程师五年,其中抓取数据占主要的一部分,抓取的信息只要有两部分,职位和简历,其中职位的抓取量为日均插入量为30万,更新量 为60万,抓取全国300多个人才网站.职友集(现在改名 ...
-
【java】抓取页面内容,提取链接(此方法可以http get无需账号密码的请求)
package 网络编程; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileOutpu ...
-
java爬虫抓取腾讯漫画评论
package com.eteclab.wodm.utils; import java.io.BufferedWriter; import java.io.File; import java.io.F ...
-
网络爬虫Java实现抓取网页内容
package 抓取网页; import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream; ...
随机推荐
-
git操作命令
参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 git 分布式版本控制系统. ...
-
AIDL和生成的java文件要分开存放,否则生成can&#39;t find symbol class
Android 5.0之后需要AIDL和生成的java文件要分开存放,否则生成can't fin symbol class.但是4.3没有这个限制.被这个弄了一天,跟老大讨论了一下才豁然开朗.
-
【转】搭建Python的Eclipse开发环境之安装PyDev插件--离线安装
原文网址:http://blog.csdn.net/wangpingfang/article/details/7181223 使用update site安装pydev插件 注意:该安装指南针对ecli ...
-
回调函数与DOM事件
原文:http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/ 先看如下代码: document.addEventListener(&q ...
-
Address already in use: JVM_Bind<;null>;:8080tomcat启动不了的问题
在MyEclipse启动或者是tomcat启动的时候出现:Address already in use: JVM_Bind<null>:8080 出现该异常,这里的8080是你的端口,有可 ...
-
freemarker自定义标签(一)
freemarker自定义标签 1.自定义标签说明 宏变量存储模板片段可以被用作自定义指令macro 2.示例说明 <html> <head> <meta http-eq ...
-
st2_057
http://vulapps.evalbug.com/s_struts2_s2-057/ 这大概是全网复现st2-057环境最简单的操作了. 不过首先,你需要安装过docker,安装方法参考官方文档h ...
-
aws s3文件上传设置accesskey、secretkey、sessiontoken
背景: 最近跟进的项目会封装aws S3资源管理细节,对外提供获取文件上传凭证的API,业务方使用获取到的凭证信息直接请求aws进行文件上传.因此,测试过程需要验证S3文件上传的有效性.aws官网有提 ...
-
bind的封装
1.bind.call.apply三者的区别: 1)bind的返回值是一个函数体,不会被立即调用 2)call.apply会立即调用,第一个参数都是用来改变this的指向,两者的区别是前者传递参数的时 ...
-
Visual Studio AI 离线模型训练(window 7)
本篇博客用tensorflow训练自带的数据mnist,参考自博客. 背景: 搭建好AI环境:查看 window 7 64位 准备工作: 在搭建AI环境过程中下载的samples-for-ai不是最新 ...