Java开发网 |
注册 |
登录 |
帮助 |
搜索 |
排行榜 |
发帖统计
|
您没有登录 |
» Java开发网 » Java SE 综合讨论区
» 编程/算法/API
打印话题 寄给朋友 订阅主题 |
作者 | 怎样抓取Google搜索结果? |
richit
发贴: 2 积分: 0 |
于 2008-05-28 19:10
为什么通过正则表达式分析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 |
已读帖子 新的帖子 被删除的帖子 |
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 |