JAVA析取百度搜索前100个结果的URL、标题和摘要

看到网上有PHP版本和C#版本的,就是没有JAVA版本的,就写一个,虽说不是最好的解决方案,也可以供大家研究,参考。

//获得百度的搜索页面,前100个搜索结果 public String getHTML(String key) throws IOException { StringBuilder sb=new StringBuilder(); String path="http://www.baidu.com/s?tn=ichuner&lm=-1&word="+URLEncoder.encode(key,"gb2312")+"&rn=100"; URL url=new URL(path); BufferedReader breader=new BufferedReader(new InputStreamReader(url.openStream())); String line=null; while((line=breader.readLine())!=null) { sb.append(line); } return sb.toString(); }

获得100个搜索结果页面的代码:

//对HTML进行析取,析取出100个URL、标题和摘要 public String[][] parseHTML(String key) { String page=null; try { page=getHTML(key); } catch(Exception ex) { ex.printStackTrace(); } String[][] pageContent_list=new String[100][3]; if(page!=null) { String regx=""; Pattern pattern=Pattern.compile(regx); Matcher matcher=pattern.matcher(page); for(int i=0;i<101;i++) { if(matcher.find()) { if(i==0) { continue; } //获得table中的数据 String table_content=matcher.group().toString(); String reg_URL="href=/"(.*?)/""; Pattern pattern_URL=Pattern.compile(reg_URL); Matcher matcher_URL=pattern_URL.matcher(table_content); String page_URL=null; if(matcher_URL.find()) { page_URL=matcher_URL.group().toString(); } page_URL=page_URL.substring(6); //得到了URL page_URL=page_URL.substring(0,page_URL.length()-1); String reg_title="(.+?)"; Pattern patter_title=Pattern.compile(reg_title); Matcher matcher_title=patter_title.matcher(table_content); String page_title=null; if(matcher_title.find()) { //得到了标题 page_title=matcher_title.group().toString(); } String reg1="(.*?)"; Pattern pattern1=Pattern.compile(reg1); Matcher matcher1=pattern1.matcher(table_content); String page_content = null; if(matcher1.find()) { page_content=matcher1.group().toString(); } int end=page_content.indexOf("

由于CSDN会变动斜杠,导致代码直接COPY时正则表达式报错。所以特意将代码截图贴上来,方便参考。

运行截图如下:

 

说明:此方法只有在百度搜索结果在全部为文本的情况下有用,如果需要解析内含图片、应用等的百度搜索结果,请自行在此代码的基础上进行修改!

 

根据反映的NullPointerException错误,估计是reg1解析时有问题。换了种提取摘要的方法。代码如下:

package com.TestProject.test;
import java.io.*;
import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {

	//获得百度的搜索页面,前100个搜索结果
	public String getHTML(String key) throws IOException
	{
		StringBuilder sb=new StringBuilder();
		String path="http://www.baidu.com/s?tn=ichuner&lm=-1&word="+URLEncoder.encode(key,"gb2312")+"&rn=100";
		System.out.println("搜索的url为:"+path);
		URL url=new URL(path);
		BufferedReader breader=new BufferedReader(new InputStreamReader(url.openStream()));
		String line=null;
		while((line=breader.readLine())!=null)
		{
			sb.append(line);
		}
		return sb.toString();
	}
	
	//对HTML进行析取,析取出100个URL、标题和摘要
	public String[][] parseHTML(String key)
	{
		String page=null;
		try
		{
			page=getHTML(key);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		String[][] pageContent_list=new String[100][3];
		if(page!=null)
		{
			String regx="";
			Pattern pattern=Pattern.compile(regx);
			Matcher matcher=pattern.matcher(page);
		    for(int i=0;i<101;i++)
		    {
		    	if(matcher.find())
		    	{
		    		if(i==0)
		    		{
		    			continue;
		    		}
		    		//获得table中的数据
		    		String table_content=matcher.group().toString();
		    		String reg_URL="href=\"(.*?)\"";
                    Pattern pattern_URL=Pattern.compile(reg_URL);
                    Matcher matcher_URL=pattern_URL.matcher(table_content);
                    String page_URL=null;
		    		if(matcher_URL.find())
		    		{
		    			page_URL=matcher_URL.group().toString();
		    		}
		    		page_URL=page_URL.substring(6);
		    		//得到了URL
		    		page_URL=page_URL.substring(0,page_URL.length()-1);
		    		String reg_title="(.+?)";
		    		Pattern patter_title=Pattern.compile(reg_title);
		    		Matcher matcher_title=patter_title.matcher(table_content);
		    		String page_title=null;
		    		if(matcher_title.find())
		    		{
		    			//得到了标题
		    			page_title=matcher_title.group().toString();
		    		}
		    		//从table_content中析取出正文
		    		String page_content = null;
		    		page_content = table_content.substring(table_content.lastIndexOf("")+5);
		    		
		    		pageContent_list[i-1][0]=page_URL;
		    		pageContent_list[i-1][1]=page_title;
		    		pageContent_list[i-1][2]=page_content;
		    	  }
		    	}
		   }
		   return pageContent_list;
    }
	
	public static void main(String[] args) {
		
		   Test test = new Test();
		   String[][] str = test.parseHTML("金庸");
		   
		   for(int i=0;i

我运行过了,应该不会有问题了。

你可能感兴趣的:(我的研究方向----搜索引擎)