怎样抓取Google搜索结果?
为什么通过正则表达式分析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的会得不到呢?
请高手帮忙解释下。
谢谢。
------解决方案--------------------这个说到底还是程序问题,仔细推敲下代码吧,既然百度能抓了,google不成问题
------解决方案--------------------