网络爬虫 java版

  • u4_422127
    了解作者
  • 3MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-15 07:45
    上传日期
java版本的网络爬虫,主要爬门户网站的新闻。代码导入ecplise就能用。抓取新闻,分析新闻,入库全部实现。内附数据库脚本。
pachong.rar
内容介绍
package com.sohu; import com.sohu.bean.NewsBean; import com.sohu.db.ConnectionManager; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.beans.StringBean; import org.htmlparser.filters.AndFilter; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tags.Div; import org.htmlparser.tags.HeadingTag; import org.htmlparser.tags.Span; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; import java.sql.PreparedStatement; import java.sql.SQLException; /** * 用于对搜狐网站上的新闻进行抓取 * @author guanminglin <guanminglin@gmail.com> */ public class SohuNews { private Parser parser = null; //用于分析网页的分析器。 private List newsList = new ArrayList(); //暂存新闻的List; private NewsBean bean = new NewsBean(); private ConnectionManager manager = null; //数据库连接管理器。 private PreparedStatement pstmt = null; public SohuNews() { } /** * 获得一条完整的新闻。 * @param newsBean * @return */ public List getNewsList(final NewsBean newsBean) { List list = new ArrayList(); String newstitle = newsBean.getNewsTitle(); String newsauthor = newsBean.getNewsAuthor(); String newscontent = newsBean.getNewsContent(); String newsdate = newsBean.getNewsDate(); list.add(newstitle); list.add(newsauthor); list.add(newscontent); list.add(newsdate); return list; } /** * 设置新闻对象,让新闻对象里有新闻数据 * @param newsTitle 新闻标题 * @param newsauthor 新闻作者 * @param newsContent 新闻内容 * @param newsDate 新闻日期 * @param url 新闻链接 */ public void setNews(String newsTitle, String newsauthor, String newsContent, String newsDate, String url) { bean.setNewsTitle(newsTitle); bean.setNewsAuthor(newsauthor); bean.setNewsContent(newsContent); bean.setNewsDate(newsDate); bean.setNewsURL(url); } /** * 该方法用于将新闻添加到数据库中。 */ protected void newsToDataBase() { //建立一个线程用来执行将新闻插入到数据库中。 Thread thread = new Thread(new Runnable() { public void run() { boolean sucess = saveToDB(bean); if (sucess != false) { System.out.println("插入数据失败"); } } }); thread.start(); } /** * 将新闻插入到数据库中 * @param bean * @return */ public boolean saveToDB(NewsBean bean) { boolean flag = true; String sql = "insert into news(newstitle,newsauthor,newscontent,newsurl,newsdate) values(?,?,?,?,?)"; manager = new ConnectionManager(); String titleLength = bean.getNewsTitle(); if (titleLength.length() > 60) { //标题太长的新闻不要。 return flag; } try { pstmt = manager.getConnection().prepareStatement(sql); pstmt.setString(1, bean.getNewsTitle()); pstmt.setString(2, bean.getNewsAuthor()); pstmt.setString(3, bean.getNewsContent()); pstmt.setString(4, bean.getNewsURL()); pstmt.setString(5, bean.getNewsDate()); flag = pstmt.execute(); } catch (SQLException ex) { Logger.getLogger(SohuNews.class.getName()).log(Level.SEVERE, null, ex); } finally { try { pstmt.close(); manager.close(); } catch (SQLException ex) { Logger.getLogger(SohuNews.class.getName()).log(Level.SEVERE, null, ex); } } return flag; } /** * 获得新闻的标题 * @param titleFilter * @param parser * @return */ private String getTitle(NodeFilter titleFilter, Parser parser) { String titleName = ""; try { NodeList titleNodeList = (NodeList) parser.parse(titleFilter); for (int i = 0; i < titleNodeList.size(); i++) { HeadingTag title = (HeadingTag) titleNodeList.elementAt(i); titleName = title.getStringText(); } } catch (ParserException ex) { Logger.getLogger(SohuNews.class.getName()).log(Level.SEVERE, null, ex); } return titleName; } /** * 获得新闻的责任编辑,也就是作者。 * @param newsauthorFilter * @param parser * @return */ private String getNewsAuthor(NodeFilter newsauthorFilter, Parser parser) { String newsAuthor = ""; try { NodeList authorList = (NodeList) parser.parse(newsauthorFilter); for (int i = 0; i < authorList.size(); i++) { Div authorSpan = (Div) authorList.elementAt(i); newsAuthor = authorSpan.getStringText(); } } catch (ParserException ex) { Logger.getLogger(SohuNews.class.getName()).log(Level.SEVERE, null, ex); } return newsAuthor; } /* * 获得新闻的日期 */ private String getNewsDate(NodeFilter dateFilter, Parser parser) { String newsDate = null; try { NodeList dateList = (NodeList) parser.parse(dateFilter); for (int i = 0; i < dateList.size(); i++) { Span dateTag = (Span) dateList.elementAt(i); newsDate = dateTag.getStringText(); } } catch (ParserException ex) { Logger.getLogger(SohuNews.class.getName()).log(Level.SEVERE, null, ex); } return newsDate; } /** * 获取新闻的内容 * @param newsContentFilter * @param parser * @return content 新闻内容 */ private String getNewsContent(NodeFilter newsContentFilter, Parser parser) { String content = null; StringBuilder builder = new StringBuilder(); try { NodeList newsContentList = (NodeList) parser.parse(newsContentFilter); for (int i = 0; i < newsContentList.size(); i++) { Div newsContenTag = (Div) newsContentList.elementAt(i); builder = builder.append(newsContenTag.getStringText()); } content = builder.toString(); //转换为String 类型。 if (content != null) { parser.reset(); parser = Parser.createParser(content, "utf-8"); StringBean sb = new StringBean(); sb.setCollapse(true); parser.visitAllNodesWith(sb); content = sb.getStrings(); // String s = "\";} else{ document.getElementById('TurnAD444').innerHTML = \"\";} } showTurnAD444(intTurnAD444); }catch(e){}"; content = content.replaceAll("\\\".*[a-z].*\\}", ""); content = content.replace("[我来说两句]", ""); } else { System.out.println("没有得到新闻内容!"); } } catch (ParserException ex) { Logger.getLogger(SohuNews.class.getName()).log(Level.SEVERE, null, ex); } return content; } /** * 根据提供的URL,获取此URL对应网页所有的纯文本信息,次方法得到的信息不是很纯, *常常会得到我们不想要的数据。不过如果你只是想得到某个URL 里的所有纯文本信息,该方法还是很好用的。 * @param url 提供的URL链接 * @return RL对应网页的纯文本信息 * @throws ParserException * @deprecated 该方法被 getNewsContent(
评论
    相关推荐