Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区 » 编程/算法/API  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 怎样抓取Google搜索结果?
richit





发贴: 2
积分: 0
于 2008-05-28 19:10 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
为什么通过正则表达式分析google的搜索结果页面代码来抓取结果的标题和链接不成功,而百度的却能成功?

public class SaveURL{

public static String savepath_SaveURL="d:\\";//默认路径为D盘根目录
static String title=null;
static String link=null;
static String localFile=null;//保存为本地文件后的路径
static String res=null;

public static void go() {
//String url= "http://www.baidu.com/s?wd=accenture&rn=10";
String url="http://www.google.com/search?hl=en&newwindow=1&q=hello&start=0&sa=N&num=30";
String content = getPage(url);//得到url所对应的网页的内容


// 对应百度 <table border="0" cellpadding="0" cellspacing="0">等的正则表达式
// 为什么快照的链接没有被下载下来?

//String reg = " <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">.*?"+
//" <a.*? href=\"(.*?)\".*?>(.*?) </a>.*? </table>";

//Google对应的正则式
String reg = " <h2 class=r>"+" <a href=\"(.*?)\".*?>(.*?) </a> </h2>";
Pattern p = Pattern.compile(reg,Pattern.CASE_INSENSITIVE ¦ Pattern.DOTALL);
Matcher m = p.matcher(content);

int i = 1;

while(m.find())
{
title=m.group(2).replaceAll(" <.*?>", "");//正则表达式
link=m.group(1);

System.out.println("----------------------------------------------");
System.out.println("第"+i+"个标题:"+title);
System.out.println("第"+i+"个链接:"+link);

i++;
}//end of while

}

public static String getPage(String page) {
try {

URL url = new URL(page);
HttpURLConnection con = (HttpURLConnection) url.openConnection();

// 以下是修正Server returned HTTP response code: 403 for URL的代码
// 通常是因为服务器的安全设置不接受Java程序作为客户端访问,解决方案是设置客户端的User Agent
con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)");

BufferedReader reader = new BufferedReader(new InputStreamReader(
con.getInputStream()));
StringBuilder b = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
b.append(line);
b.append("\r\n");
}
return b.toString();
} catch (FileNotFoundException ex) {
System.out.println("NOT FOUND:" + page);
return null;
} catch (ConnectException ex) {
System.out.println("Timeout:" + page);
return null;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}

public static void main(String[] args){
go();
}

}

如果打开google的结果目录页,查看源代码的结构,是和百度的差别不大啊,就是google的每个结果都是放在一个 <div> </div>中 <h2 class=r>里边,而百度里边的是放在一个 <table> </table>标签里,为什么Google的会得不到呢?

请高手帮忙解释下。
谢谢。




基于WEB的J2EE报表解决方案集锦

话题树型展开
人气 标题 作者 字数 发贴时间
17115 怎样抓取Google搜索结果? richit 2850 2008-05-28 19:10
15470 Re:怎样抓取Google搜索结果? loveapple 156 2008-05-29 09:27
14804 Re:怎样抓取Google搜索结果? richit 301 2008-05-31 03:00
15743 Re:怎样抓取Google搜索结果? loveapple 237 2008-06-02 15:42
14987 Re:怎样抓取Google搜索结果? JiafanZhou 447 2008-06-03 15:50
14656 Re:怎样抓取Google搜索结果? JiafanZhou 1122 2008-05-30 16:51

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923