JAvaネット爬虫類-爬取小説
2828 ワード
今日突然1つのネットの爬虫類を書いて自分で読んでいる小説《聖墟》を少し取り出したいです
小説のURL:http://www.biqudu.com/43_43821/
皆さんもこれを使って別の小説を登ってみてください.(主に正規表現を書き、法則を探す)
私の考え:
1.小説の章節目録のURLを見つける
2.章目録のURLに各章のURLを登録する
3.章ごとのページから章ごとの内容を抽出する
コードは次のとおりです.
小説のURL:http://www.biqudu.com/43_43821/
皆さんもこれを使って別の小説を登ってみてください.(主に正規表現を書き、法則を探す)
私の考え:
1.小説の章節目録のURLを見つける
2.章目録のURLに各章のURLを登録する
3.章ごとのページから章ごとの内容を抽出する
コードは次のとおりです.
package cn.hncu.net.spider;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
public class SpiderDemo2 {
/**
* @param args
*/
public static void main(String[] args) {
try {
URL mulu=new URL("http://www.biqudu.com/43_43821/");
BufferedReader br=new BufferedReader(new InputStreamReader(mulu.openStream()));
BufferedWriter bw=new BufferedWriter(new FileWriter("abcde.txt"));
String mainContextReg="《 》 ";
// の
String urlReg="";
Pattern mainContextPattern=Pattern.compile(mainContextReg);
Pattern urlPattern=Pattern.compile(urlReg);
String str=null;
boolean boo=false; // かどうか
while((str=br.readLine())!=null){
if(!boo){
Matcher mainContextMatcher=mainContextPattern.matcher(str);
if(mainContextMatcher.find()){
boo=true;
System.out.println(str.substring(str.indexOf("")+4, str.lastIndexOf("")));
}
}else{
Matcher urlmatcher=urlPattern.matcher(str);
if(urlmatcher.find()){
// System.out.println(urlmatcher.group());
// の
String str1=urlmatcher.group();
String url="http://www.biqudu.com"+str1.substring(str1.indexOf(""));
// System.out.println(str1);
// System.out.println(url);
zj(url,bw);
}
}
}
br.close();
bw.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void zj(String url,BufferedWriter bw){
try {
URL mainUrl=new URL(url);
BufferedReader br=new BufferedReader(new InputStreamReader(mainUrl.openStream()));
String titleReg="[\\s\\S]*";
String contextReg="[\\s\\S]*";
String newLine="";
String spac=" ";
Pattern titlePattern=Pattern.compile(titleReg);
Pattern contextPattern=Pattern.compile(contextReg);
Pattern newLinePattern=Pattern.compile(newLine);
Pattern spacPattern=Pattern.compile(spac);
String str=null;
String title=null;
String context=null;
while((str=br.readLine())!=null){
Matcher m = titlePattern.matcher(str);
if(m.find()){
title=m.group();
bw.write(title.substring(4, title.lastIndexOf("