⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 astroextracttest.java

📁 一个搜索引擎,希望对大家有用
💻 JAVA
字号:
package ch9.regex;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class AstroExtractTest {
	//输出文件位置
	private String sorePath="c:\\astro.txt";
	//从一个URL下载HTML文本到一个本地字符串
	private static String getDocumentAt(String urlString) {
		//本地字符串缓冲区
		StringBuffer html_text = new StringBuffer();
		try {
			//根据urlString创建一个指向Web的网络资源
			URL url = new URL(urlString);
			//创建一个到该网络资源的连接
			URLConnection conn = url.openConnection();
			//创建输入流
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					conn.getInputStream()));
			String line = null;
			//逐行读取文本放到缓冲区
			while ((line = reader.readLine()) != null)
				html_text.append(line + "\n");
			reader.close();
		} catch (MalformedURLException e) {
			System.out.println("无效的URL: " + urlString);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return html_text.toString();
	}
	//从一个字符串提取信息
	public void extractUrl(String url)throws IOException{
		//标题
		String title = null;
		//正文
		String body = null;
		//文件输出流
		BufferedWriter bw=null;
		try{
			bw=new BufferedWriter(new FileWriter(new File(sorePath)));
			//获得网页文本内容
			String str = AstroExtractTest
					.getDocumentAt(url);
			//创建提取标题和正文的正则表达式
			Pattern pt_title = Pattern
					.compile(
							"<font class=f1491><b>(.*)</b></font>$(.*)<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">(.*)<p><p>(.*)</td></tr></table>",
							Pattern.MULTILINE | Pattern.DOTALL);
			//创建提取星座信息的正则表达式
			Pattern pt_constellation = Pattern.compile("<td colspan=\"2\"><b>(.*)</b>(.*)</td></tr>");
			//创建提取星座运程信息的正则表达式
			Pattern pt_content = Pattern.compile("<p><p><b><br><br>(.*)<br><br>(.*)<br><br>(.*)<br><br>(.*)<br><br>(.*)<br><br>(.*)<br><br>(.*)<br><br>(.*)<br><br>(.*)</b><p><p>");
			//创建提取星座运程总结的正则表达式
			Pattern pt_summary = Pattern.compile("\\+1\"><b>(.*)</b></font></td></tr></table>", Pattern.DOTALL);
			
			Matcher mc = pt_title.matcher(str);
			while (mc.find()) {
				//提取标题
				title = mc.group(1).trim();
				//提取正文
				body = mc.group(3);
				//写入标题到输入文件
				bw.write(title+"\r\n");
			}
			//提取星座信息
			mc = pt_constellation.matcher(body);
			while (mc.find()) {
				//写入星座信息到输入文件
				bw.write(mc.group(1).trim()+"\r\n");
			}
			//提取运程信息
			mc = pt_content.matcher(body);
			while (mc.find()) {
				int count=mc.groupCount();
				//写入运程信息到输入文件
				for(int i=1;i<=count;i++)
				{
					bw.write(mc.group(i).trim()+"\r\n");
				}
			}
			//提取运程总结信息
			mc=pt_summary.matcher(body);
			while (mc.find()) {
				//写入运程总结到输入文件
				bw.write(mc.group(1).trim()+"\r\n");
			}
		}catch(IOException e){
			e.printStackTrace();
		}catch(PatternSyntaxException e){		
			System.out.println("正则表达式语法错误");
		}catch(IllegalStateException e){
			System.out.println("找不到匹配字符串");
		}
		finally{
			if(bw!=null)
				bw.close();
		}		
	}
	
	public static void main(String[] args) {
		AstroExtractTest astroExtractor=new AstroExtractTest();
		try{
			astroExtractor.extractUrl("http://astro.sina.com.cn/sagittarius.html");	
		}catch(IOException e){
			e.printStackTrace();
		}		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -