2017-06-13 2 views
0

私は脆弱性スキャナーで後で使用する目的で基本的なクローラーを実装しています。私は接続のためのjsoupを使用している/取得し、HTMLドキュメントの解析。jsoupを使ってサイトからページへのナビゲート可能なリンクを取得するには?

私は目的のサイト(www.example.com)のベース/ルートを手動で提供し、接続します。

... 
Connection connection = Jsoup.connect(url).userAgent(USER_AGENT); 
Document htmlDocument = connection.get(); 
this.htmlDocument = htmlDocument; 
... 

次に、ページのすべてのリンクを取得します。

この後、私はリンクをループし、サイトのすべてのページへのリンクを取得しようとします。

for (Element link : linksOnPage) { 
       this.links.add(link.absUrl("href")); 
    } 

問題は次のとおりです。私が得るリンクによっては、新しいページへのリンクではなく、ページへのリンクさえないリンクもあります。一例として、のようになったリンク:

リンクをフィルタリングして、同じルート/ベースサイトの新しいページへのリンクだけを取得します。

+1

チェックリンクは、ドメイン名で始まる場合: 'link.startsWith( "http://www.ics.uci.edu/")' –

+0

要素をjsoupのオブジェクトには "startsWith"のようなメソッドはなく、ベースドメイン(/pages.page2.html)で始まらないリンクはjsを使って同じサイトに移動している可能性があります。 – Vlad

+0

'Element link'オブジェクトのString URLを取得します。そして、 'url'でstartsWithを呼び出します。ナビゲーションにjsを使用するリンクには、共通のプロパティが必要です。それらによってフィルタリングすることができます –

答えて

1

これは簡単です。 absUrlは、画像フォーマットやJSやCSSで終わるかどうかを確認します。

if(absUrl.startsWith("http://www.ics.uci.edu/") && !absUrl.matches(".*\\.(bmp|gif|jpg|png|js|css)$")) 
{ 

    //here absUrl starts with domain name and is not image or js or css 
} 
+0

これは、必要に応じて新しい拡張機能を追加するだけでよいため、ほとんどの場合はうまく動作しますが、より優れた汎用ソリューションが必要です。ここからhttps://jsoup.org/apidocs/私は、元のセレクタ "Elements linksOnPage = htmlDocument.select(" a [href] ");" img [src〜=(?i)\\。(png | jpe?g)]のようにregexで修正することができます。問題は、.htmlの横にある一般的なファイル拡張子を除外する正規表現を構築することが難しいことです。 – Vlad

関連する問題