java开发项目集锦附源码.docx

上传人:b****8 文档编号:30017054 上传时间:2023-08-04 格式:DOCX 页数:93 大小:39.11KB
下载 相关 举报
java开发项目集锦附源码.docx_第1页
第1页 / 共93页
java开发项目集锦附源码.docx_第2页
第2页 / 共93页
java开发项目集锦附源码.docx_第3页
第3页 / 共93页
java开发项目集锦附源码.docx_第4页
第4页 / 共93页
java开发项目集锦附源码.docx_第5页
第5页 / 共93页
点击查看更多>>
下载资源
资源描述

java开发项目集锦附源码.docx

《java开发项目集锦附源码.docx》由会员分享,可在线阅读,更多相关《java开发项目集锦附源码.docx(93页珍藏版)》请在冰豆网上搜索。

java开发项目集锦附源码.docx

java开发项目集锦附源码

新浪天气预报新闻java抓去程序

package.weather1;

importjava.io.BufferedReader;

importjava.io.ByteArrayOutputStream;

importjava.io.File;

importjava.io.FileWriter;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.InputStreamReader;

importjava.io.PrintWriter;

import.URL;

import.URLConnection;

importjava.util.regex.Matcher;

importjava.util.regex.Pattern;

importmons.logging.Log;

importmons.logging.LogFactory;

import.update.Getdata;

/**

*正则方式抓取新浪天气新闻上的新闻

*地址

*@paramargs

*/

publicclassNewlist{

privatestaticfinalLoglog=LogFactory.getLog(Newlist.class);

/**

*测试

*@paramargs

*/

publicstaticvoidmain(Stringargs[]){

Newlistn=newNewlist();

String[]k=n.getNewList();

for(inti=0;i

System.out.println(k[i].replace("href=\"","href=\"newinfo2.jsp?

url="));

}

String[]m=n.getNewinfo("news/2008/1119/35261.html");

for(intl=0;l

System.out.println(m[l]);

}

}

/**

*由url地址获得新闻内容string[]

*新闻中的图片下载到本地,文中新闻地址改成本地地址

*@paramurl

*@return

*/

publicString[]getNewinfo(Stringurl){

StringURL="

//30是指取30段满足给出的正则条件的字符串,如果只找出10个,那数组后面的全为null

String[]s=analysis("

(.*?

",getContent(URL),30);

for(inti=0;i

Patternsp=Ppile("src=\"(.*?

)\"");

Matchermatcher=sp.matcher(s[i]);

if(matcher.find()){

Stringimageurl=analysis("src=\"(.*?

)\"",s[i],1)[0];

if(!

imageurl.startsWith("http:

//")){

imageurl="

}

System.out.println("新闻有图片:

"+imageurl);

Stringcontent=getContent(imageurl);

String[]images=imageurl.split("/");

Stringimagename=images[images.length-1];

System.out.println("图片名:

"+imagename);

try{

Filefwl=newFile(imagename);

PrintWriteroutl=newPrintWriter(fwl);

outl.println(content);

outl.close();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

System.out.println("s[i]:

"+s[i]);

//修改文件图片地址

s[i]=s[i].replace(analysis("src=\"(.*?

)\"",s[i],1)[0],imagename);

}

}

returns;

}

publicString[]getNewList(){

Stringurl="

returngetNewList(getContent(url));

}

privateString[]getNewList(Stringcontent){

//String[]s=analysis("align=\"center\"valign=\"top\">

).gif\"width=\"70\"height=\"65\">",content,50);

String[]s=analysis("

  • (.*?

  • ",content,50);

    returns;

    }

    privateString[]analysis(Stringpattern,Stringmatch,inti){

    Patternsp=Ppile(pattern);

    Matchermatcher=sp.matcher(match);

    String[]content=newString[i];

    for(inti1=0;matcher.find();i1++){

    content[i1]=matcher.group

    (1);

    }

    //下面一段是为了剔除为空的串

    intl=0;

    for(intk=0;k

    if(content[k]==null){

    l=k;

    break;

    }

    }

    String[]content2;

    if(l!

    =0){

    content2=newString[l];

    for(intn=0;n

    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

    展开阅读全文
    相关资源
    猜你喜欢
    相关搜索

    当前位置:首页 > 高等教育 > 其它

    copyright@ 2008-2022 冰豆网网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1