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();
    	}
    
    }
  • 相关阅读:
    如何配置透明发光的骚气 vscode —— Jinkey 原创
    JS引用类型总结
    element UI -- 默认样式修改不成功原因
    上传本地Vue项目到github
    网页加载速度优化方法总结
    移动端click时间、touch事件、tap事件详解
    移动端开发用touch事件还是click事件
    禁止网站调用favicon.ico请求
    HTTP里面的响应和请求
    jave script 中this的指向 (六种场景)
  • 原文地址:https://www.cnblogs.com/naive/p/3573068.html
Copyright © 2011-2022 走看看