follow大神教程——实践java爬虫之四

题外话main中输出

for(int b:a)

 {
       System.out.println(b);
  }

遍历a这个容器,把它的元素取出来,赋值给b这个临时变量,然后将b打印出来。

按大神操作步骤修改之,运行

卧槽,必须得上图纪念一下了

follow大神教程——实践java爬虫之四

非常好

ok 上代码:

FileReaderWriter.java

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;
 }
}

Cfsn.java

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";
 }
}

Spider.java

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 {
 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;
 }
 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/news/" + urlMatcher.group(1);
   // 添加成功匹配的结果
   results.add(zhuhuTemp);
   // 继续查找下一个匹配对象
   isFind = questionMatcher.find() && urlMatcher.find();
  }
  return results;
 }
}

Main.java

import java.util.ArrayList;
public class Main {
 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);
  // 打印结果
  // 写入本地
  for (Cfsn cfsn : myCfsn) {
   FileReaderWriter.writeIntoFile(cfsn.writeString(),
     "D:/中国食品安全网.txt", true);
  }
 }
}

 

接下来将其搞到数据库中就得靠自己咯 [哭泣][哭泣][哭泣]

 

——未完待续——

你可能感兴趣的:(follow大神教程——实践java爬虫之四)