content2[n]=content[n];
}
returncontent2;
}else{
returncontent;
}
}
/**
*由地址获取网页内容
*@paramstrUrl
*@return
privateStringgetContent(StringstrUrl){
try{
//URLurl=newURL(strUrl);
//BufferedReaderbr=newBufferedReader(newInputStreamReader(url.openStream()));
URLConnectionuc=newURL(strUrl).openConnection();
//通过修改http头的User-Agent来伪装成是通过浏览器提交的请求
uc.setRequestProperty("User-Agent",
"Mozilla/4.0(compatible;MSIE5.0;WindowsXP;DigExt)");
System.out.println("-----------------------------------------");
System.out.println("Content-Length:
"+uc.getContentLength());
System.out.println("Set-Cookie:
"+uc.getHeaderField("Set-Cookie"));
System.out.println("-----------------------------------------");
//获取文件头信息
System.out.println("Header"+uc.getHeaderFields().toString());
System.out.println("-----------------------------------------");
BufferedReaderbr=newBufferedReader(newInputStreamReader(uc.getInputStream(),"gb2312"));
Strings="";
StringBuffersb=newStringBuffer();
while((s=br.readLine())!
=null){
sb.append(s+"\r\n");
}
System.out.println("长度+"+sb.toString().length());
returnsb.toString();
}catch(Exceptione){
return"erroropenurl"+strUrl;
}
}
*/
publicstaticStringgetContent(StringstrUrl){
URLConnectionuc=null;
Stringall_content=null;
try{
all_content=newString();
URLurl=newURL(strUrl);
uc=url.openConnection();
uc.setRequestProperty("User-Agent",
"Mozilla/4.0(compatible;MSIE5.0;WindowsXP;DigExt)");
System.out.println("-----------------------------------------");
System.out.println("Content-Length:
"+uc.getContentLength());
System.out.println("Set-Cookie:
"+uc.getHeaderField("Set-Cookie"));
System.out.println("-----------------------------------------");
//获取文件头信息
System.out.println("Header"+uc.getHeaderFields().toString());
System.out.println("-----------------------------------------");
if(uc==null)
returnnull;
InputStreamins=uc.getInputStream();
ByteArrayOutputStreamoutputstream=newByteArrayOutputStream();
byte[]str_b=newbyte[1024];
inti=-1;
while((i=ins.read(str_b))>0){
outputstream.write(str_b,0,i);
}
all_content=outputstream.toString();
//System.out.println(all_content);
}catch(Exceptione){
e.printStackTrace();
log.error("获取网页内容出错");
}finally{
uc=null;
}
//returnnewString(all_content.getBytes("ISO8859-1"));
System.out.println(all_content.length());
returnall_content;
}
}
现在的问题是:
图片下载不全,我用后面两种getContent方法下图片,下来的图片大小都和文件头里获得的Content-Length,也就是图片的实际大小不符,预览不了。
而且反复测试,两种方法每次下来的东西大小是固定的,所以重复下载没有用?
测试toString后length大小比图片实际的小,而生成的图片比图片数据大。
下载后存储过程中图片数据增加了!
图片数据流toString过程中数据大小发生了改变,还原不回来。
其它新闻内容没有问题。
估计是图片的编码格式等的问题。
在图片数据流读过来时直接生成图片就可以了。
publicintsaveImage(StringstrUrl){
URLConnectionuc=null;
try{
URLurl=newURL(strUrl);
uc=url.openConnection();
uc.setRequestProperty("User-Agent",
"Mozilla/4.0(compatible;MSIE5.0;WindowsXP;DigExt)");
//uc.setReadTimeout(30000);
//获取图片长度
//System.out.println("Content-Length:
"+uc.getContentLength());
//获取文件头信息
//System.out.println("Header"+uc.getHeaderFields().toString());
if(uc==null)
return0;
InputStreamins=uc.getInputStream();
byte[]str_b=newbyte[1024];
intbyteRead=0;
String[]images=strUrl.split("/");
Stringimagename=images[images.length-1];
Filefwl=newFile(imagename);
FileOutputStreamfos=newFileOutputStream(fwl);
while((byteRead=ins.read(str_b))>0){
fos.write(str_b,0,byteRead);
};
fos.flush();
fos.close();
}catch(Exceptione){
e.printStackTrace();
log.error("获取网页内容出错");
}finally{
uc=null;
}
return1;
}
方法二:
首先把搜索后的页面用流读取出来,再写个正则,去除不要的内容,再把最后的结果存成xml格式文件、或者直接存入数据库,用的时候再调用
本代码只是显示html页的源码内容,如果需要抽取内容请自行改写publicstaticStringregex()中的正则式
packagerssTest;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
import.HttpURLConnection;
import.MalformedURLException;
import.URL;
import.URLConnection;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassMyRSS
{
/**
*获取搜索结果的html源码
**/
publicstaticStringgetHtmlSource(Stringurl)
{
StringBuffercodeBuffer=null;
BufferedReaderin=null;
try
{
URLConnectionuc=newURL(url).openConnection();
/**
*为了限制客户端不通过网页直接读取网页内容,就限制只能从浏览器提交请求.
*但是我们可以通过修改http头的User-Agent来伪装,这个代码就是这个作用
*
*/
uc.setRequestProperty("User-Agent",
"Mozilla/4.0(compatible;MSIE5.0;WindowsXP;DigExt)");
//读取url流内容
in=newBufferedReader(newInputStreamReader(uc
.getInputStream(),"gb2312"));
codeBuffer=newStringBuffer();
StringtempCode="";
//把buffer内的值读取出来,保存到code中
while((tempCode=in.readLine())!
=null)
{
codeBuffer.append(tempCode).append("\n");
}
in.close();
}
catch(MalformedURLExceptione)
{
e.printStackTrace();
}
catch(IOExceptione)
{
e.printStackTrace();
}
returncodeBuffer.toString();
}
/**
*正则表达式
**/
publicstaticStringregex()
{
StringgoogleRegex="(.*?
)href=\"(.*?
)\"(.*?
)\">(.*?
)(.*?
)(.*?
)
";
returngoogleRegex;
}
/**
*测试用
*在google中检索关键字,并抽取自己想要的内容
*
**/
publicstaticListGetNews()
{
ListnewsList=newArrayList();
StringallHtmlSource=MyRSS
.getHtmlSource("maxthon&hs=SUZ&q=%E8%A7%81%E9%BE%99%E5%8D%B8%E7%94%B2&meta=&aq=f");
Patternpattern=Ppile(regex());
Matchermatcher=pattern.matcher(allHtmlSource);
while(matcher.find())
{
StringurlLink=matcher.group
(2);
Stringtitle=matcher.group(4);
title=title.replaceAll("","");
title=title.replaceAll("","");
title=title.replaceAll("...","");
Stringcontent=matcher.group(6);
content=content.replaceAll("","");
content=content.replaceAll("","");
content=content.replaceAll("...","");
newsList.add(urlLink);
newsList.add(title);
newsList.add(content);
}
returnnewsList;
}
/**
*main方法
**/
publicstaticvoidmain(String[]args)
{
System.out
.println(MyRSS
.getHtmlSource("
}
}
方法三:
jsp自动抓取新闻自动抓取新闻
packagecom.news.spider;
importjava.io.File;
importjava.io.FileFilter;
importjava.text.SimpleDateFormat;
importja