zoukankan      html  css  js  c++  java
  • Java 抓取网页内容

    前两天想写一段自动提取微博状态的代码。据我所知,实现这个功能即可以用PHP写,也可以用Java写。我认为用Java写调试方便一点,PHP的脚本还要上传到服务器什么的。

    代码很简单的,新建一个java.net包的URL类的对象,以这个url做为写入源,内容保存在字符串中。然后新建一个文件,把字符串写出即可。不过要注意,不同网站使用不同的编码字。现在大多数的网站使用utf-8字符编码,基于wordpress搭建的网站都是使用这种编码字符的。但是,很多中文网站,包括网易等门户网站,还是使用gb2312编码。一方面gb2312的历史比utf-8要久一些,早期的中文网站以gb2312搭建,现在再修改工作量太大;另一方面,显示同样长度的文字内容,用gb2312编码比用utf-8编码要节省空间。真是因为有这个区别,所以输入网页html代码的时候要选择正确的读入方式。java的inputstream构造函数可以选utf-8作为一个参数传入,但是没有gb2312这个选项。所以抓取网易的网页时,保存下来的文档就会出现乱码。

    另外,这个例子只是抓取静态的网页内容,对于微博的状态还是不行,因为要抓取状态就要先登录账号,这就要参考新浪的API文档。

    import java.beans.FeatureDescriptor;
    import java.io.*;
    import java.net.*;
    
    
    public class spider {
    
    	/**
    	 * @param args
    	 */
    	public static String fetchWebpage(String urlname){
    		URL url;
    		String s;
    		StringBuffer sbuffer = new StringBuffer();
    		
    		try{
    			url = new URL(urlname);
    			// my website use utf-8, but some other websites, like 163 and baidu, use gb2312.
    			InputStreamReader sreader = new InputStreamReader(url.openStream(),"utf-8");	
    			BufferedReader breader = new BufferedReader(sreader);
    			while((s=breader.readLine())!=null){
    				sbuffer.append(s);
    			}
    			breader.close();
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		return sbuffer.toString();
    	}
    	       
    	      
    	
    	
    	public static void main(String[] args) throws IOException {
    		// TODO Auto-generated method stub 
    		String address = "http://www.mr-naive.com";
    		FileOutputStream fos = new FileOutputStream(new File("myPage.html"));
    		OutputStreamWriter oswrite = new OutputStreamWriter(fos, "utf-8");
    		BufferedWriter bwriter = new BufferedWriter(oswrite);
    		bwriter.write(fetchWebpage(address));
    		bwriter.close();
    	}
    
    }
  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/naive/p/3573068.html
Copyright © 2011-2022 走看看