下面是该爬虫的关键代码,查看更多的源代码请点击这里

package com.lxf.crawler;
import java.io.File;
import java.io.FileWriter;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.util.NodeList;
import com.lxf.dao.bean.NewsBean;
import com.lxf.dao.imp.NewsDao;
import com.lxf.dao.inf.NewsDaoInf;
/*** <爬虫程序> 从新浪新闻中爬取新闻分类、标题及内容 (需导入htmlparser.jar包,可以从我的github上下载https://github.com/lxf44944/sinaNews_crawler/)* * @author 刘向峰*/
public class SinaNews {/*** 测试入口* * @param args*/public static void main(String args[]) {// china world// society media opinionString type = "world";File file = new File(type);if (!file.exists())// 如果不存在就创建{file.mkdirs();}SinaNews gn = new SinaNews();String a = gn.getNews(type);// gn.writefile(a, "SinaNews.html",type);}// 抓取信息 组成良好格式public String getNews(String type) {NewsDaoInf dao = new NewsDao();try {NodeFilter filter = new TagNameFilter("ul");Parser parser = new Parser();Parser bodyparser = new Parser();parser.setURL("http://news.sina.com.cn/" + type + "/");// 互联网模块的地址// System.out.println(parser.getEncoding());parser.setEncoding("gb2312");NodeList list = parser.extractAllNodesThatMatch(filter);StringBuilder newsStr = new StringBuilder("<!DOCTYPE html><html><head></head><body><table>");// 新闻表格字符串SinaNews gn = new SinaNews();for (int i = 0; i < list.size() - 1; i++) {Tag node = (Tag) list.elementAt(i);for (int j = 1; j < node.getChildren().size(); j++) {String textstr = node.getChildren().elementAt(j).toHtml().trim();if (textstr.length() > 0) {int linkbegin = textstr.indexOf("href=");// 截取<a>链接字符串起始位置int linkend = textstr.indexOf("\">");// 截取<a>链接字符串结束位置String sublink = textstr.substring(linkbegin + 6,linkend);// 链接字符串String link = "";if (sublink.indexOf("target") != -1) {link = sublink.substring(0, sublink.indexOf("\""));} else {link = sublink;// 链接字符串}int titlebegin = textstr.indexOf("\">");int titleend = textstr.indexOf("</a>");String title = textstr.substring(titlebegin + 2,titleend).trim();System.out.println("正在抓取: " + title);// 通过标题判断该新闻是否已经存在if (dao.hasNews(title)) {System.out.println("【该记录已经存在】");continue;}if (title.contains("视频:") || title.contains("视频:")) {System.out.println("【无法获得视频新闻】");continue;}if (title.contains("(图)")) {title = title.replace("(图)", "");}try {/** 新闻内容处理开始 */NodeFilter bodyfilter = new AndFilter(new TagNameFilter("div"),new HasAttributeFilter("id", "artibody"));bodyparser.setURL(link);// 地址url// bodyparser.setEncoding(bodyparser.getEncoding());bodyparser.setEncoding("gb2312");NodeList bodylist = bodyparser.extractAllNodesThatMatch(bodyfilter);// 新闻内容字符串if (bodylist.elementAt(0) == null) {System.out.println("【新闻无内容】");continue;}String newstextstr = bodylist.elementAt(0).toHtml().trim();// 只保留正文内容,保留P标签以保持其排版int bodybegin = newstextstr.indexOf("<p>");int bodyend = newstextstr.lastIndexOf("</p>") + 4;int bodyimgbegin = newstextstr.indexOf("<div class=\"img_wrapper\">");int bodyimgend = newstextstr.lastIndexOf("<span class=\"img_descr\">");String body = "";if (bodybegin < 0) {body = newstextstr;} else {body = newstextstr.substring(bodybegin, bodyend);}if (bodyimgbegin >= 0) {body = newstextstr.substring(bodyimgbegin,bodyimgend) + "</div>" + body;}/** 写入数据库 */NewsBean newsBean = new NewsBean(0, title, body,link, link.substring(link.lastIndexOf("/") - 10,link.lastIndexOf("/")), type);dao.add(newsBean);// gn.writefile(body, link,type); // 写文件} catch (Exception e) {System.out.println("抓取信息子页面出错,出错信息为:");e.printStackTrace();/** 新闻内容处理结束 */}/** 将标题拼接到字符串中 */newsStr.append("<tr><td><a target=\"_blank\" href=\""+ link + "\">");newsStr.append(title);newsStr.append("</a></td></tr>");}}}newsStr.append("</table></body></html>");return newsStr.toString();} catch (Exception e) {System.out.println("抓取信息出错,出错信息为:");e.printStackTrace();return "";}}// 写文件public void writefile(String str, String filename, String type) {if (filename.contains(".cn/")) {filename = type+ "\\"+ filename.substring(filename.indexOf(".cn/") + 4).replace("/", "_");} else {filename = type + "\\" + filename;}File file = new File(filename);if (!file.exists() && filename.indexOf("/") != -1)// 如果不存在就创建{file.mkdirs();}try {FileWriter writer = new FileWriter(filename);writer.write(str);writer.close();System.out.println("成功生成新闻页面" + filename);} catch (Exception e) {System.out.println("将信息写入文件" + filename + "发生错误,错误信息为:");e.printStackTrace();}}
}

Java编程应用(六):新浪新闻爬虫程序相关推荐

  1. java实现爬取新浪新闻指定天数(一段时间)的头条新闻

    目标:java实现爬取新浪新闻指定天数(一段时间)的头条新闻 需要导入jar包:fastjson和Jsoup. IDEA导入jar包办法:Intellij IDEA 添加jar包的三种方式 思路: 找 ...

  2. php每天扒取当天新闻_php 抓取新浪新闻的程序代码

    Jquery中文网 > 脚本编程  > php  > 正文 php 抓取新浪新闻的程序代码 php 抓取新浪新闻的程序代码 发布时间:2016-10-09   编辑:www.jque ...

  3. php抓取新浪数据,php 抓取新浪新闻的程序代码

    抓取就是采集了,今天因为我们要做一个实时采集新浪新闻的功能,下面整理了一个非常了得的php 抓取新浪新闻的程序,我们来看看. 首先,需要下载一个simple_html_dom第三方扩展库,具体下载方式 ...

  4. 第六课 Python新浪新闻爬虫最终整理总结

    代码整理封装如图: 6不6? Python简洁又强大! 至此,教程圆满结束,还有什么不懂的或有疑问的问题,欢迎大家加我的QQ:1099718640 顺便再送上完整代码,凑凑字数,哈哈~(其实推荐大家去 ...

  5. Java RTTI与反射(参照Java编程思想与新浪博客)

    一.Java的RTTI  RTTI(Run-Time Type Identification,通过运行时类型识别)的含义就是在运行时识别一个对象的类型,其对应的类是Class对象,每个java里面的类 ...

  6. php抓取新浪新闻,新浪新闻采集程序

    利用正则表达式提取内容信息<?php //error_reporting(0); $date=date("Ymd"); //echo $date; $url="ht ...

  7. java 爬虫(爬新浪新闻) 如何从零开始 - 简书

    本文由 简悦 SimpRead 转码, 原文地址 bbs.huaweicloud.com 这篇文章能够快速教你爬取新浪新闻.希望这篇文章对您有所帮助!如果您有想学习的知识或建议,可以给作者留言~ 如何 ...

  8. 多线程新浪新闻搜索网络爬虫-基于关键字

    本文为原创博客,仅供技术学习使用.未经允许,禁止将其复制下来上传到百度文库等平台.如有转载请注明本文博客的地址(链接) 源码获取请联系:1563178220@qq.com 简介 互联网有海量的新闻,如 ...

  9. 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

最新文章

  1. 使用rsync实现数据实时同步备份--实战
  2. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile)
  3. CVE-2015-3636(pingpong root) android内核 UAF漏洞分析
  4. python3爬虫(2)下载有固定链接的视频
  5. css3双击点赞动画,Twitter上的点赞动画
  6. php 修改多级菜单,用PHP实现多级树型菜单
  7. Vscode在Windows上配置远程开发
  8. 检测远程主机上的某个端口是否开启——telnet命令
  9. 《宽带与接入网技术》第四章 以太网接入技术
  10. 医疗大数据与智能医疗临床诊断(大数据人工智能公司)
  11. Phalanx 动态规划
  12. 电脑重装系统以后出现 error: unknown filesystem怎么办?
  13. 你看到的都是招数,不是内功
  14. 位(Bit)与字节(Byte)
  15. python 界面一
  16. C#毕业设计——基于C#+asp.net+sqlserver的网上鲜花销售系统设计与实现(毕业论文+程序源码)——鲜花销售系统
  17. 2022年舞台泡泡机市场前景分析及研究报告
  18. 漫画 | 因为用了C语言,Linux内核代码一团糟
  19. 电脑核显可以用html吗,集成核显的电脑也能玩GTA5!只要修改这两个设置,流畅到无法想象...
  20. 支付宝上线直播功能,网友怒赞:YunOS成了

热门文章

  1. php在线解密工具,zend5.2,zend5.3,zend5.4,支持ioncube,魔方,sourceguardian,goto,微擎加密,混淆eval等解密
  2. 目前市面上的固码有哪些品牌
  3. 5个常用的开源聊天应用
  4. 计算机专业申请phd美国,申请美国计算机PHD全奖的建议
  5. 双十二还没到,几何画板提前开抢
  6. Teamcenter许可不够
  7. 15款免费又好用的安全软件
  8. 小白量化彩票实战(7)用sklearn神经网络预测彩票号码和特征
  9. nginx报错解决connect() to unix:/tmp/php-cgi-73.sock failed (111: Connection refused
  10. 财政局计算机管理办法,财政局计算机信息系统安全管理制度