私はjsoupを使用してJavaでWebクローラーを作成しています(これはtutorialを使用しています)。電子メールリンクでブロックされたWebクローラー
私が直面する問題は、クローラがElementループに各リンクを取り込み、そのうちのいくつかが電子メールアドレスであることです。だから、メールアドレスにJsoup.connect(URL)
を使用しようとすると、httpまたはhttps要求のみを使用するように指示するエラーが表示されます。
電子メールアドレスのリンクを取得するときにプログラムの再帰を停止するにはどうすればよいですか?あなたは!link.attr("abs:href").startsWith("mailto:")
かどうかをテストする必要が
public class Main {
public static DB db = new DB();
public static void main(String[] args) throws SQLException, IOException{
db.runSql2("TRUNCATE Record;");
processPage("http://www.mit.edu");
}
public static void processPage(String URL) throws SQLException,IOException{
String sql = "select * from Record where URL = '" +URL+"'";
ResultSet rs = db.runSql(sql);
if(rs.next()){
} else {
sql = "INSERT INTO `Crawler`.`Record` " + "(`URL`) VALUES " + "(?);";
PreparedStatement stmt = db.conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stmt.setString(1,URL);
stmt.execute();
Document doc = Jsoup.connect(URL).get();
if(doc.text().contains("research")){
System.out.println(URL);
}
Elements questions = doc.select("a[href]");
for(Element link:questions){
if(link.attr("href").contains("mit.edu")){
System.out.println(link.attr("abs:href"));
processPage(link.attr("abs:href"));
}
}
}
}
}
ありがとうございました!私はstartswithのhttp条件を追加し、それは動作します。 JsoupがHTMLに解析できない画像リンクがいくつかあるので、processPage再帰呼び出しにtry catchを追加しました。私はそれを止める方法を本当に知りません^^ PS:それは勉強するだけの課題ではありませんでした – Sacha