java抓取网页内容(前两天想写一段自动提取微博状态的代码,可以用PHP写 )
优采云 发布时间: 2022-01-18 00:11java抓取网页内容(前两天想写一段自动提取微博状态的代码,可以用PHP写
)
前两天想写一个自动提取微博状态的代码。据我所知,实现这个功能可以用PHP写,也可以用Java写。我觉得用Java写和调试比较容易,PHP脚本需要上传到服务器什么的。
代码很简单,创建一个包的URL类的对象,用这个URL作为写作源,将内容保存在一个字符串中。然后创建一个新文件并写出字符串。但是请注意,不同的 网站 使用不同的代码字。现在大多数 网站 使用 utf-8 字符编码,而基于 wordpress 的 网站 使用这种编码。但是很多中文网站,包括网易网站等门户网站,仍然使用gb2312编码。一方面,gb2312的历史比utf-8要长。早期中文网站是用gb2312构建的,现在修改工作量太大;-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();
}
}