java开发项目集锦附源码.docx
- 文档编号:30017054
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:93
- 大小:39.11KB
java开发项目集锦附源码.docx
《java开发项目集锦附源码.docx》由会员分享,可在线阅读,更多相关《java开发项目集锦附源码.docx(93页珍藏版)》请在冰豆网上搜索。
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(" (.*? ) 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中检索关键字,并抽取自己想要的内容 * **/ publicstaticList { List 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
";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 开发 项目 集锦 源码