Java 写的简单网络爬虫
觉得好玩,昨天就研究了一下java爬虫。
在网上搜索了一些样例研究了一下。仿造写了一个简单的爬虫,可以自动爬取某本小说的章节(需要自定义正则表达式),利用 多线程+锁 可以爬的更快,也可以同时爬多本书。
目前针对的是起点小说网的正则,利用set和list存需要爬的链接和已经爬过的链接,再用map存某本书的名字,已经爬取的章节数等等,然后写到文件里面。
两个类实现
AllUrl.java
import java.io.*; import java.net.URL; import java.net.URLConnection; import java.text.SimpleDateFormat; import java.util.*; public class AllUrl { public static int maxDepth = 100;//章节数 public static int maxThread = 3;//最大线程数 public static ListwaitUrl = new ArrayList<>(); public static Set overUrl = new HashSet<>(); public static Map UrlDepth = new HashMap<>(); public static Map bookName = new HashMap<>(); public static String savePath = "E:\\起点book\\"; public static synchronized void workUrl(String url,int depth){ if(depth > AllUrl.maxDepth){ System.out.println("《"+bookName.get(url)+"》爬取达到设定的章节数,停止爬取。"); SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); Date date = new Date(System.currentTimeMillis()); System.out.println(formatter.format(date)); Thread.currentThread().interrupt(); }else{ if(AllUrl.overUrl.contains(url)){ System.out.println(url+"已经爬取过"); }else{ try{ URL url1 = new URL(url);//新链接 URLConnection urlConnection = url1.openConnection();//链接 新链接 InputStream is = urlConnection.getInputStream();//获取链接的内容 BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));//读取转换获取的内容到缓冲区 StringBuilder stringBuilder = new StringBuilder();//读取缓冲区内容 String tempString ; while((tempString = br.readLine()) != null){ stringBuilder.append(tempString);//追加字符到stringBuilder } //这里的正则表示式针对的是https://www.qidian.com/ 起点中文网 String sStart = "class=\"read-content j_readContent\"", tem = "