有时候需要对获取某个网页上的内容,例获取某一个网页上的所有超链接、form表单填写的内容以及提交的连接。这样就需要对网页的内容进行解析,解析后可以使用正则表达式获取自己想要的内容。(在java中也可使用jsoup来对网页内容进行解析)
下面主要通过URLConnection类的getInputStream()方法获取到输入地址的网页内容资源的输出流,从输出流读取信息,从而解析网页内容。
创建Swing界面
public GreatContentFrame() {
super();//调用构造方法
setTitle("解析网页内容");//设置窗体标题
setBounds(100, 100, 484, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭方式
final JPanel panel = new JPanel();//实例化面板
getContentPane().add(panel, BorderLayout.NORTH);
final JLabel label = new JLabel();
label.setText("网址:");
//将按钮添加到Panel中
panel.add(label);
textAdress = new JTextField();
//设置JTextField尺寸
textAdress.setPreferredSize(new Dimension(260,25));
panel.add(textAdress);
final JButton button = new JButton();
//注册button监听器
button.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
String address = textAdress.getText().trim();// 获得输入的网址
// 调用方法,获得网页内容的集合对象
Collection urlCollection = getURLCollection(address);
Iterator it = urlCollection.iterator(); //获得集合的迭代器对象
while(it.hasNext()){
// 在文本域中显示解析的内容
ta_content.append((String)it.next()+"\n"); }
}
});
button.setText("解析");
panel.add(button);
final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);
ta_content = new JTextArea();
ta_content.setFont(new Font("微软雅黑", Font.BOLD, 14));
scrollPane.setViewportView(ta_content);
}
首先在项目上创建一个类,继承JFrame类(窗体)。
再编写该类的构造方法,设置窗体的标题内容、关闭方式等,实例化JPanel类(面板),将JPanel添加到窗体中, 然后将Jlable、JButton、JTextArea等空间到JPanel中。其中button需要使用监听器监听按钮点击事件,当按下按钮时,从文本框获取到输入的网址,调用getURLCollection()方法,得到迭代器后进行遍历显示在文本域中。
public Collection<String> getURLCollection(String urlString){
URL url = null; // 声明URL
URLConnection Connection = null; // 声明URLConnection
Collection<String> urlCollection = new ArrayList<String>(); //实例化集合对象
try{
// 实例化URL对象
url = new URL(urlString);
Connection = url.openConnection();// 得到连接对象
// 打开url引用资源的通信链接(如果尚没有建立这样的连接)
Connection.connect();
// 获取返回的流对象
InputStream inStream = Connection.getInputStream();
//转为字符流
InputStreamReader in = new InputStreamReader(inStream,"UTF-8");
// 创建缓冲流对象
BufferedReader br = new BufferedReader(in);
// 读取信息,解析网页
String nextLine = br.readLine();
while (nextLine !=null){
// 解析网页的全部内容,添加到集合中
urlCollection.add(nextLine);
nextLine = br.readLine();
}
}catch(Exception ex){
ex.printStackTrace();
}
return urlCollection;
}
使用URLConnection类的getInputStream()方法获取到网页内容的输入流对象,从该输入流中读取信息,达到解析网页内容的效果。
注 输入的网址要是一个有效的网页地址,解析得到网页内容后,就可以获取你想要的内容了。
效果