2017-03-27 5 views
1

UR1 www.example.comを考えてみてください。リンクがたくさんあるかもしれませんし、内部でも外部でもよいかもしれません。私はすべてのサブリンクのリストを取得したいサブサブリンクであってもサブリンクだけである。 EG彼らはサブリンクではないサブサブあるので、リンク上でそれを達成するために、そこに道を.Isとしてのみ2と3が有用である4のうち、次にjsoupを使用してURLのサブリンクを取得する

1)www.example.com/images/main 
2)www.example.com/data 
3)www.example.com/users 
4)www.example.com/admin/data 

を次のように4つのリンクがある場合、 j-soupを介して。これがj-soupを通して達成できなかった場合は、他のJava APIを私に紹介することができます。 また、最初に送信された親URLのリンクであることに注意してください(例:www.example.com)

答えて

1

サブリンクにはスラッシュを1つ含めることができます例えばスラッシュ:

List<String> list = new ArrayList<>(); 
list.add("www.example.com/images/main"); 
list.add("www.example.com/data"); 
list.add("www.example.com/users"); 
list.add("www.example.com/admin/data"); 

for(String link : list){ 
    if((link.length() - link.replaceAll("[/]", "").length()) == 1){ 
     System.out.println(link); 
    } 
} 

link.length():スラッシュ

の数を数える:
link.replaceAll("[/]", "").length()文字の数を数えます

差が1に等しい場合、右リンクelse else。


EDIT

は、どのように私はサブリンクのためのウェブサイト全体をスキャンしますか?

のrobots.txtファイルまたはRobots exclusion standardと、このための答え、それはアイデアがあるので、例えばhttps://stackoverflow.com/robots.txtのためのウェブサイトのすべてのサブリンクを定義このファイルを読むために、あなた、この中のSO [

https://stackoverflow.com/posts/、0:ここでは、このウェブサイトからのサブリンクを抽出し、あなたを助けることができるコードの一部であることができます。これはあなたが表示されます

public static void main(String[] args) throws Exception { 

    //Your web site 
    String website = "http://stackoverflow.com"; 
    //We will read the URL https://stackoverflow.com/robots.txt 
    URL url = new URL(website + "/robots.txt"); 

    //List of your sub-links 
    List<String> list; 

    //Read the file with BufferedReader 
    try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) { 
     String subLink; 
     list = new ArrayList<>(); 

     //Loop throw your file 
     while ((subLink = in.readLine()) != null) { 

      //Check if the sub-link is match with this regex, if yes then add it to your list 
      if (subLink.matches("Disallow: \\/\\w+\\/")) { 
       list.add(website + "/" + subLink.replace("Disallow: /", "")); 
      }else{ 
       System.out.println("not match"); 
      } 
     } 
    } 

    //Print your result 
    System.out.println(list); 
} 

ここで?、 https://stackoverflow.com/search/https://stackoverflow.com/search?、 https://stackoverflow.com/feeds/https://stackoverflow.com/feeds?、 https://stackoverflow.com/unanswered/https://stackoverflow.com/unanswered?、https://stackoverflow.com/u/https://stackoverflow.com/messages/https://stackoverflow.com/ajax/https://stackoverflow.com/plugins/]

Demo about the regex that i useです。

希望すると、これが役立ちます。

+0

どのように私はサブリンクのためにウェブサイト全体をスキャンするでしょう –

+0

あなたの実装は、ウェブサイト内のすべての内部リンクを取得した後に動作します –

+0

私の編集を確認してください@javafan ** robots.txt **を読むことですあなたはそこからサブリンクを抽出することができますので、Webサイトのすべての情報が含まれています –

1

ウェブページのリンクをスキャンするには、JSoupライブラリを使用できます。前の回答で提案されているように

import java.io.IOException; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

class read_data { 

    public static void main(String[] args) { 
     try { 
      Document doc = Jsoup.connect("**your_url**").get(); 
      Elements links = doc.select("a"); 
      List<String> list = new ArrayList<>(); 
      for (Element link : links) { 
       list.add(link.attr("abs:href")); 
      } 
     } catch (IOException ex) { 

     } 
    } 
} 

リストを使用することができます。


ウェブサイト上のすべてのリンクを読むためのコードを以下に示します。私は説明のためにhttp://stackoverflow.com/を使用しました。私はそれがウェブサイトをscarpingする前に会社のterms of useを通過することをお勧めします。

import java.io.IOException; 
import java.util.HashSet; 
import java.util.Set; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.select.Elements; 

public class readAllLinks { 

    public static Set<String> uniqueURL = new HashSet<String>(); 
    public static String my_site; 

    public static void main(String[] args) { 

     readAllLinks obj = new readAllLinks(); 
     my_site = "stackoverflow.com"; 
     obj.get_links("http://stackoverflow.com/"); 
    } 

    private void get_links(String url) { 
     try { 
      Document doc = Jsoup.connect(url).get(); 
      Elements links = doc.select("a"); 
      links.stream().map((link) -> link.attr("abs:href")).forEachOrdered((this_url) -> { 
       boolean add = uniqueURL.add(this_url); 
       if (add && this_url.contains(my_site)) { 
        System.out.println(this_url); 
        get_links(this_url); 
       } 
      }); 

     } catch (IOException ex) { 

     } 

    } 
} 

uniqueURLフィールドにすべてのリンクの一覧が表示されます。

+0

あなたの助けに感謝します。私は私がウェブページ全体のリンクを得ることを望むウェブページのリンクを単に得ることを望んでいないことを私に教えさせます。 –

+0

[this](http://stackoverflow.com/questions/32299871/java-get-every-webpage-associated-with-domain-name-programmatically)が表示されます。それがあなたのために働かないかどうか私に知らせてください。 –

+0

私も受け入れた答えは同じでした –

関連する問題