爬虫采标题和链接

package lucene;

public class Cfsn {
	 public String title;  //新闻标题
	 public String CfsnUrl ;//网页链接
	  
	 //构造方法初始化数据
	 public Cfsn(){
	  title = "" ;
	  CfsnUrl = "" ;
	 }
	 //格式化写入到本地时的排版
	 public String writeString() {
	  String result = "";
	   result += "问题:" + title + "\r\n";
	   result += "链接:" + CfsnUrl + "\r\n";
	   result += "\r\n\r\n";
	   return result;
	 }
	  
	  
	 @Override
	 public String toString(){
	  return "标题:"+title+"\n链接:"+CfsnUrl+"\n";
	 }
	}

package lucene;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FileReaderWriter {
	// 创建文件的函数createNewFile
	public static boolean createNewFile(String filePath) {
		boolean isSuccess = true;
		// 如有则将"\\"转为"/",没有则不产生任何变化
		String filePathTurn = filePath.replaceAll("\\\\", "/");
		// 先过滤掉文件名
		int index = filePathTurn.lastIndexOf("/");
		String dir = filePathTurn.substring(0, index);
		// 再创建文件夹
		File fileDir = new File(dir);
		isSuccess = fileDir.mkdirs();
		// 创建文件
		File file = new File(filePathTurn);
		try {
			isSuccess = file.createNewFile();
		} catch (IOException e) {
			isSuccess = false;
			e.printStackTrace();
		}
		return isSuccess;
	}

	// 写入文件的函数
	public static boolean writeIntoFile(String content, String filePath,
			boolean isAppend) {
		boolean isSuccess = true;
		// 先过滤掉文件名
		int index = filePath.lastIndexOf("/");
		String dir = filePath.substring(0, index);
		// 创建除文件的路径
		File fileDir = new File(dir);
		fileDir.mkdirs();
		// 再创建路径下的文件
		File file = null;
		try {
			file = new File(filePath);
			file.createNewFile();
		} catch (IOException e) {
			isSuccess = false;
			e.printStackTrace();
		}
		// 写入文件
		FileWriter fileWriter = null;
		try {
			fileWriter = new FileWriter(file, isAppend);
			fileWriter.write(content);
			fileWriter.flush();
		} catch (IOException e) {
			isSuccess = false;
			e.printStackTrace();
		} finally {
			try {
				if (fileWriter != null)
					fileWriter.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return isSuccess;
	}
}

package lucene;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

//Spider类来存放一些爬虫常用的函数。
public class Spider {
	public static String SendGet(String url) {
		// 定义一个字符串用来存储网页内容
		String result = "";
		// 定义一个缓冲字符输入流
		BufferedReader in = null;
		try {
			// 将string转成url对象
			URL realUrl = new URL(url);
			// 初始化一个链接到那个url的连接
			URLConnection connection = realUrl.openConnection();
			// 开始实际的连接
			connection.connect();
			// 初始化 BufferedReader输入流来读取URL的响应
			in = new BufferedReader(new InputStreamReader(connection
					.getInputStream(), "UTF-8"));
			// 用来临时存储抓取到的每一行的数据
			String line;
			while ((line = in.readLine()) != null) {
				// 遍历抓取到的每一行并将其存储到result里面
				result += line;
			}
		} catch (Exception e) {
			System.out.println("发送GET请求出现异常!" + e);
			e.printStackTrace();
		}
		// 使用finally来关闭输入流
		finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return result;
	}

	public static ArrayList<Cfsn> GetCfsn(String content) {
		// 预定义一个ArrayList来存储结果
		ArrayList<Cfsn> results = new ArrayList<Cfsn>();
		// 用来匹配标题
		Pattern questionPattern = Pattern.compile("_blank\">(.+?)<");
		Matcher questionMatcher = questionPattern.matcher(content);
		// 用来匹配url,也就是问题的链接
		Pattern urlPattern = Pattern.compile("span><a href=\"(.+?)\"");
		Matcher urlMatcher = urlPattern.matcher(content);
		// 标题和链接要均能匹配到
		boolean isFind = questionMatcher.find() && urlMatcher.find();
		while (isFind) {
			// 定义一个知乎对象来存储抓取到的信息
			Cfsn zhuhuTemp = new Cfsn();
			zhuhuTemp.title = questionMatcher.group(1);
			zhuhuTemp.CfsnUrl = "http://www.cfsn.cn/"
					+ urlMatcher.group(1);
			// 添加成功匹配的结果
			results.add(zhuhuTemp);
			// 继续查找下一个匹配对象
			isFind = questionMatcher.find() && urlMatcher.find();
		}
		return results;
	}
}

package lucene;

import java.util.ArrayList;

public class Main {
	public static void main(String args[]) {
		// 定义即将访问的链接
		String url = "http://www.cfsn.cn/news/node_4549.htm";
		// 访问链接并获取页面内容
		String content = Spider.SendGet(url);
		// 获取该页面的所有的Cfsn对象
		ArrayList<Cfsn> myCfsn = Spider.GetCfsn(content);
		// 打印结果
		// 写入本地
		for (Cfsn cfsn : myCfsn) {
			FileReaderWriter.writeIntoFile(cfsn.writeString(),
					"D:/中国食品安全网.txt", true);
		}
	}
}

package demo;

import java.util.ArrayList;

import lucene.Cfsn;
import lucene.Spider;


public class test {
	public static void main(String args[]) {
		  // 定义即将访问的链接
		  String url = "http://www.cfsn.cn/news/node_4534.htm";
		  // 访问链接并获取页面内容
		  String content = Spider.SendGet(url);
		  // 获取该页面的所有的Cfsn对象
		  ArrayList<Cfsn> myCfsn = Spider.GetCfsn(content);
		   
		  String[] titleArray = new String[myCfsn.size()];
		  String[] urlArray = new String[myCfsn.size()];
		    //循环赋值
		  for(int i=0;i<titleArray.length;i++){
		   titleArray[i]=myCfsn.get(i).title;
		   urlArray[i]=myCfsn.get(i).CfsnUrl;
		  }
		  for(int i=0;i<titleArray.length;i++){
		   System.out.println(titleArray[i]+"&"+urlArray[i]);
		  }
		  // 打印结果
		  //System.out.println(myCfsn);
		 }
}


你可能感兴趣的:(爬虫采标题和链接)