使用Jsoup解析XML抓取新浪新闻文章

本文介绍了一种使用JSoup库解析Sina新闻API并获取新闻详细信息的方法,包括标题、链接、关键词、图片和媒体名称。通过自定义的GlobalConstants类实现了URL构造、新闻内容提取等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. package ivyy.taobao.com.domain.xml;  
  2.   
  3. import ivyy.taobao.com.utils.GlobalConstants;  
  4.   
  5. import java.net.URL;  
  6.   
  7. import org.jsoup.Jsoup;  
  8. import org.jsoup.nodes.Element;  
  9. import org.jsoup.select.Elements;  
  10.   
  11. /** 
  12.  *@Author:liangjilong 
  13.  *@Date:2015-1-4 
  14.  *@Email:jilongliang@sina.com 
  15.  *@Version:1.0 
  16.  *@Description这个是通过jsoup处理的 
  17.  */  
  18. public class SinaNew {  
  19.       
  20.     public static void main(String[] args)throws Exception {  
  21.         String requestURL = GlobalConstants.getUrl(2"xml");  
  22.         org.jsoup.nodes.Document doc=Jsoup.parse(new URL(requestURL), 3000);  
  23.         // String html=doc.html();  
  24.         Elements items=doc.select("item");//获取item(item具有多个节点)  
  25.           
  26.         String title = "", url = "", keywords = "", img = "", media_name = "";  
  27.         int i=1;  
  28.         for (Element its : items) {  
  29.               
  30.             title=its.select("title").html();  
  31.             url=its.select("url").html();  
  32.             keywords=its.select("keywords").html();  
  33.             img=its.select("img").html();  
  34.             media_name=its.select("media_name").html();  
  35.               
  36.             String newsText=GlobalConstants.getNewsContent(url);//处理新闻内容  
  37.               
  38.             //System.out.println(title + "\n" + url + "\n" + keywords + "\n"+ url + "\n" + media_name);  
  39.               
  40.             System.out.println("==================第"+i+"篇=================="+newsText);  
  41.             i++;  
  42.         }  
  43.     }  
  44. }  

 

源代码:http://download.youkuaiyun.com/detail/jilongliang/8324543

 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. package ivyy.taobao.com.utils;  
  2.   
  3. import java.net.URL;  
  4.   
  5. import org.jsoup.Jsoup;  
  6. import org.jsoup.nodes.Document;  
  7.   
  8. /** 
  9.  *@Author:liangjilong 
  10.  *@Date:2015-1-4 
  11.  *@Email:jilongliang@sina.com 
  12.  *@Version:1.0 
  13.  *@Description 
  14.  */  
  15. public class GlobalConstants {  
  16.       
  17.     /*** 
  18.      * 获取url连接 
  19.      * @param page第几页 
  20.      * @param format格式(XML、JSON) 
  21.      * @return 
  22.      */  
  23.     public static String getUrl(Integer page,String format){  
  24.         StringBuffer buffer=new StringBuffer("http://api.roll.news.sina.com.cn/zt_list?channel=news");  
  25.         String url="";  
  26.         buffer.append("&cat_1=shxw");//显示新闻  
  27.         buffer.append("&cat_2==zqsk||=qwys||=shwx||=fz-shyf");  
  28.         buffer.append("&level==1||=2");//级别  
  29.         buffer.append("&show_ext=1");  
  30.         buffer.append("&show_all=1");//显示所有  
  31.         buffer.append("&show_num=22");//显示多少条  
  32.         buffer.append("&tag=1");  
  33.         buffer.append("&format="+format);  
  34.         buffer.append("&page="+page);  
  35.         buffer.append("&callback=newsloader");  
  36.         url=buffer.toString();  
  37.         return url;  
  38.     }  
  39.       
  40.       
  41.     /*** 
  42.      * 获取文章的内容 
  43.      * 从新浪的网页分析,通过文章body的id就可以拿到相应的文章内容.. 
  44.      * @param url 
  45.      * @return 
  46.      */  
  47.     public static String getNewsContent(String url) throws Exception{  
  48.         Document doc=Jsoup.parse(new URL(url), 3000);  
  49.         if(doc!=null){  
  50.             String artibody=doc.getElementById("artibody").html();//通过网页的html的id去拿到新闻内容artibody  
  51.             return artibody;  
  52.         }else{  
  53.             return "网络异常";  
  54.         }  
  55.     }  
  56. }  

 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. package ivyy.taobao.com.utils;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.InputStream;  
  5. import java.io.InputStreamReader;  
  6. import java.net.HttpURLConnection;  
  7. import java.net.URL;  
  8.   
  9. /** 
  10.  *@Author:liangjilong 
  11.  *@Date:2015-1-4 
  12.  *@Email:jilongliang@sina.com 
  13.  *@Version:1.0 
  14.  *@Description 
  15.  */  
  16.   
  17. public class HttpRequestUtils {  
  18.     /** 
  19.      * 发送http请求 
  20.      * POST和GET请求都可以 
  21.      * @param requestUrl 请求地址 
  22.      * @param method传入的执行的方式 是GET还是POST方式 
  23.      * @return String 
  24.      */  
  25.     public static String HttpURLConnRequest(String requestUrl,String method) {  
  26.         StringBuffer buffer = new StringBuffer();  
  27.         try {  
  28.             URL url = new URL(requestUrl);  
  29.             HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
  30.             httpUrlConn.setDoInput(true);  
  31.             httpUrlConn.setRequestMethod(method);  
  32.             httpUrlConn.setUseCaches(false);    
  33.             httpUrlConn.setInstanceFollowRedirects(true); //重定向  
  34.             httpUrlConn.connect();  
  35.             // 将返回的输入流转换成字符串  
  36.             InputStream inputStream = httpUrlConn.getInputStream();  
  37.             InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
  38.             BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
  39.   
  40.             String str = null;  
  41.             while ((str = bufferedReader.readLine()) != null) {  
  42.                 buffer.append(str);  
  43.             }  
  44.             bufferedReader.close();  
  45.             inputStreamReader.close();  
  46.             // 释放资源  
  47.             inputStream.close();  
  48.             inputStream = null;  
  49.             httpUrlConn.disconnect();  
  50.   
  51.         } catch (Exception e) {  
  52.             e.printStackTrace();  
  53.         }  
  54.         return buffer.toString();  
  55.     }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值