【Java】用Applet实现百度关键词查询结果数的抓取

Java课的小作业~ 通过url获取百度搜索结果页面HTML,并通过正则表达式取得其中的结果个数。


package web;

import java.io.*;

import java.net.*;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import java.applet.Applet;

import java.net.*;

import java.awt.*;

import java.awt.event.*;

public class GetUrl extends Applet implements ActionListener {

TextField keyword = new TextField(30); // 定义搜索的关键字

TextField show = new TextField(30);

Choice EngineName; // 使用的搜索引擎列表,使用下拉框

Button go = new Button("开始搜索");

public void init() {

setBackground(Color.white); // 设置背景为白色以便配合网页色彩

keyword = new TextField(20);

show = new TextField(20);

EngineName = new Choice();

EngineName.addItem("百度搜索");

// EngineName.addItem("搜狐");

// EngineName.addItem("有道搜索");

EngineName.select(0); // 设置缺省显示的项目为 "百度搜索"

add(keyword);

add(show);

add(EngineName);

add(go);

go.addActionListener(this);

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == go) {

try {

goSearch();

} catch (Exception e1) {

showStatus("搜索时发生异常:" + e1.toString());

}

}

}

public void goSearch() throws Exception {

Graphics g = null;

String str = keyword.getText();

if (str.equals("")) {

showStatus("请填写搜索的关键字!");

return;

}

String url = "http://www.baidu.com/s?wd=";

url +=URLEncoder.encode(str,"UTF-8");// 将关键字编码成URL格式

URL u = new URL(url);

showStatus("正在连接搜索引擎" + url);

String geturl = GetData(u);

Pattern pattern = Pattern.compile("([\u76f8|\u5173|\u7ed3|\u679c|\u7ea6]{5})(.+)(\u4e2a)");//正则式,似乎不使用Unicode编码也可以

Matcher matcher = pattern.matcher(geturl);

if (matcher.find( )) {

showStatus("获取完毕");

show.setText(" " + matcher.group());

} else {

showStatus("没有结果");

}

//getAppletContext().showDocument(new URL(url), "_blank");

}

// public void paint (Graphics g)

//   {

//       g.drawString ("Hello World", 25, 50);

//   }

public static String GetData(URL url) throws Exception{

InputStream in = url.openStream();

byte[] data = readInputStream(in);

String htmldata = new String(data,"utf-8");//输入输出流重编码,与页面编码一致,否则乱码

return htmldata;

}

public static byte[] readInputStream(InputStream in) throws Exception{

ByteArrayOutputStream out = new ByteArrayOutputStream();

byte[] buffer = new byte[4096];

int bytes;

while((bytes = in.read(buffer))!= -1){

out.write(buffer,0,bytes);

}

in.close();

return out.toByteArray();

}

}

以上です

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,802评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,082评论 19 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,386评论 11 349
  • 首先,将他们自己公司的业务紧密捆绑在一起,使得再来竞争者无法进入市场,建立贸易壁垒,垄断市场,消耗竞争者的利润和资产。
    吴筱雨_8dbf阅读 206评论 0 0
  • 第一篇给手账做了一个大概介绍,现在让我们慢慢开始行动起来制作手账吧。 首先是梦想计划。 假如你是从现在开始要好好规...
    唐苦不苦阅读 550评论 1 3