2016-08-31 6 views
1

私は特定のウェブページを持っており、特定のURLがそれらのウェブページで使用されているかどうかをチェックしたいですか? 37000のWebページがあり、手動でURLを検索すると時間がかかります。私はウェブページからURLを掻き集めるスクリプトを持っています。ウェブページで 'adsbygoogle'キーワードを検索したいのですが、このキーワードを使ってウェブページからURLを検索する方法はわかりません。ここまで私が試したことがあります。クラス名を使用してウェブサイトからスクリプトの特定のスクリプトファイルを抽出する方法

import org.jsoup.Jsoup; 
import org.jsoup.helper.Validate; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

import java.io.IOException; 

/** 
* Example program to list links from a URL. 
*/ 
public class ListLinks { 
    public static void main(String[] args) throws IOException { 

     String url = "url1,url2,.."; 
     print("Fetching %s...", url); 

     Document doc = Jsoup.connect(url).timeout(10000).get(); 
     Elements links = doc.select("a[href]"); 
     Elements media = doc.select("[src]"); 
     Elements imports = doc.select("link[href]"); 
     Elements scripts = doc.getElementsByTag("script"); 
     for (Element script : scripts) { 
      System.out.println(script.data()); 
     } 

     print("\nMedia: (%d)", media.size()); 
     for (Element src : media) { 
      if (src.tagName().equals("img")) 
       print(" * %s: <%s> %sx%s (%s)", 
         src.tagName(), src.attr("abs:src"), src.attr("width"), src.attr("height"), 
         trim(src.attr("alt"), 20)); 
      else 
       print(" * %s: <%s>", src.tagName(), src.attr("abs:src")); 
     } 

     print("\nImports: (%d)", imports.size()); 
     for (Element link : imports) { 
      print(" * %s <%s> (%s)", link.tagName(),link.attr("abs:href"), link.attr("rel")); 
     } 

     print("\nLinks: (%d)", links.size()); 
     for (Element link : links) { 
      print(" * a: <%s> (%s)", link.attr("abs:href"), trim(link.text(), 35)); 
     } 
    } 

    private static void print(String msg, Object... args) { 
     System.out.println(String.format(msg, args)); 
    } 

    private static String trim(String s, int width) { 
     if (s.length() > width) 
      return s.substring(0, width-1) + "."; 
     else 
      return s; 
    } 
} 

私はこのコードを使用しているが、プログラム

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> 
<!-- xxxxx --> 
<ins class="adsbygoogle" 
    style="display:inline-block;width:xxxpx;height:xxxpx" 
    data-ad-client="ca-pub-3778064616989016" 
    data-ad-slot="xxxxxx"></ins> 
<script> 
+0

するとあなたは明確でした:ページに「adsbygoogle.js」が含まれている場合は、スクリプト、src属性、または実際には情報のみが必要ですか? –

+0

「adsbygoogle」というキーワードを含むURLを抽出したいだけです – user3548039

答えて

1

次の例では、URLのリスト(pagesToCrawl)を処理するためにjsoup使用して、このコードを配置するために、どこでも得ていないのです。 doc.select("script")を使用すると、すべてのスクリプトエフェクトが選択され、searchTerm( "adsbygoogle.js")で解析されます。これは、URLの数千人のために、などのバッチ内のエントリを処理し、代わりに、メモリ内のファイルに格納する必要があるかもしれない、ただ一般的なPOCである

import org.jsoup.Connection.Response; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class ListLinks { 

    public void scanForScript(ArrayList<String> pagesToCrawl, String scriptName){ 

     List<String> pagesWithoutScript = new ArrayList<>(); 
     List<String> pagesWithScript = new ArrayList<>(); 
     String searchTerm = scriptName; 

     Response response; 
     Document doc; 

     for (String page : pagesToCrawl) { 
      try { 
       response = Jsoup.connect(page) 
         .userAgent(
           "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36") 
         .followRedirects(true).ignoreHttpErrors(true).execute(); 

       if (response.statusCode() != 200) { 
        System.out.println(page + " returned " + response.statusCode()); // handle pages with 404 error 
        continue; 
       } 

       doc = response.parse(); 

       boolean containsScript = false; 
       for (Element scriptElement : doc.select("script")) { // grab the script elements 
        if (scriptElement.toString().contains(searchTerm)) { // search for searchterm 
         containsScript = true; 
         break; 
        } 
       } 
       if (containsScript) { // store filtered pages 
        pagesWithScript.add(page); 
       } else { 
        pagesWithoutScript.add(page); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     System.out.println("\nNumber of pages containing script: " + pagesWithScript.size()); 
     for (String page : pagesWithScript) { 
      System.out.println(page); 
     } 
     System.out.println("\n" + "Number of pages not containing script:" + pagesWithoutScript.size()); 
     for (String page : pagesWithoutScript) { 
      System.out.println(page); 
     } 
    } 

    public static void main(String[] args) { 

     ArrayList<String> pagesToCrawl = new ArrayList<>(); 
     pagesToCrawl.add("http://stackoverflow.com/q/39244584/1661938"); 
     pagesToCrawl.add("http://www.quickonlinetips.com/archives/2013/07/load-google-adsense-script-once/"); 
     pagesToCrawl.add("http://www.w3schools.com/cssref/css_selectors.asp"); 
     pagesToCrawl.add("http://www.apnapaisa.com/agent-registration/index.html"); 

     new ListLinks().scanForScript(pagesToCrawl, "adsbygoogle.js"); 

    } 

} 

出力:

http://www.apnapaisa.com/agent-registration/index.html returned 404 

Number of pages containing script: 1 
http://www.quickonlinetips.com/archives/2013/07/load-google-adsense-script-once/ 

Number of pages not containing script:2 
http://stackoverflow.com/q/39244584/1661938 
http://www.w3schools.com/cssref/css_selectors.asp 
+0

エラー:記号が見つからない – user3548039

+0

完全なコードをhttp://pastebin.com/(登録不要)のように投稿してください。見てみましょう。 –

+0

http://pastebin.com/dLrcRJEz – user3548039

関連する問題