• 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();
    	}
    
    }
  • 相关阅读:
    单点登录原理与简单实现
    python pandas自定义函数之apply函数用法
    python应用-scipy,numpy,sympy计算微积分
    数据预处理-数据规约
    主成分分析python代码实现
    缺失值处理与格朗日插值法
    python pandas数据分析操作
    数据探索-数据特征分析
    数据探索-数据质量分析
    python -matplotlib figure操作
  • 原文地址:https://www.cnblogs.com/naive/p/3573068.html
Copyright © 2020-2023  润新知