2017-08-18 6 views
2

現在、私は自分のAo3(Archive of Our Own)fandomに追加された最新の5つのファンフィクションのストーリーを収集できるプログラムを開発しています。これらのストーリーは、先週のファンフィクションの投稿を保持する私が設定したArrayListに追加されます。毎週の終わりに、 ArrayListの内容を私のサブディレクトリのRedditポストに貼り付けることができるテキストファイルにダンプすることを計画しています。今、重複を避けるために、私は新しく解析されたストーリーと現在ArrayListで保持されているストーリーを比較したいと考えていました。jsoupを使用して特定のタグ間でWebページのデータを削る

(追加情報:ボットは、Webページごとに30分チェックします)私が上に捕まるよ

部分は、実際のWebページの解析とHTMLタグの間からコンテンツを取得しています。

CSSセレクタを検索しましたが、IMBDなどの簡単なウェブサイトのようなものからほとんどすべての例が混乱しています。

基本的な調査から、私が見ている本体のように見えます。物語はすべて順序付けられたリストタグの中にあります。

<o1 class="work index group"> 
    <li class="work blurb group" id="work_10504812" role="article>...</li> 
    <li class="work blurb group" id="work_9656693" role="article>...</li> 
    <li class="work blurb group" id="work_11814486" role="article>...</li> 
    //Goes on for ~20 more stories 
    <li class="work blurb group" id="work_11687247" role="article>...</li> 
</ol> 

わかりやすくするために、各リストタイプは、順序付きリスト内にある1つのストーリーです。 1つのリストタグ内にあるものはすべて以下のとおりです。

<ol class="work index group"> 
    <li class="work blurb group" id="work_10504812" role="article"> 
    <!--title, author, fandom--> 
    <div class="header module"> 
    <h4 class="heading"> 
     <a href="/works/10504812">Pocket Healer</a> 
     by 

     <!-- do not cache --> 
     <a rel="author" href="https://stackoverflow.com/users/OverNoot/pseuds/OverNoot">OverNoot</a> 
    </h4> 
    <h5 class="fandoms heading"> 
     <span class="landmark">Fandoms:</span> 
     <a class="tag" href="/tags/Overwatch%20(Video%20Game)/works">Overwatch (Video Game)</a> 
     &nbsp; 
    </h5> 
    <!--required tags--> 
    <ul class="required-tags"> 
<li> <a class="help symbol question modal modal-attached" title="Symbols key" aria-controls="#modal" href="/help/symbols-key.html"><span class="rating-general-audience rating" title="General Audiences"><span class="text">General Audiences</span></span></a></li> 
<li> <a class="help symbol question modal modal-attached" title="Symbols key" aria-controls="#modal" href="/help/symbols-key.html"><span class="warning-no warnings" title="No Archive Warnings Apply"><span class="text">No Archive Warnings Apply</span></span></a></li> 
<li> <a class="help symbol question modal modal-attached" title="Symbols key" aria-controls="#modal" href="/help/symbols-key.html"><span class="category-femslash category" title="F/F"><span class="text">F/F</span></span></a></li> 
<li> <a class="help symbol question modal modal-attached" title="Symbols key" aria-controls="#modal" href="/help/symbols-key.html"><span class="complete-no iswip" title="Work in Progress"><span class="text">Work in Progress</span></span></a></li> 
</ul> 
    <p class="datetime">17 Aug 2017</p> 
    </div> 
    <!--warnings again, cast, freeform tags--> 
    <h6 class="landmark heading">Tags</h6> 
    <ul class="tags commas"> 
    <li class="warnings"><strong><a class="tag" href="/tags/No%20Archive%20Warnings%20Apply/works">No Archive Warnings Apply</a></strong></li><li class="relationships"><a class="tag" href="/tags/Fareeha%20%22Pharah%22%20Amari*s*Angela%20%22Mercy%22%20Ziegler/works">Fareeha "Pharah" Amari/Angela "Mercy" Ziegler</a></li><li class="characters"><a class="tag" href="/tags/Fareeha%20%22Pharah%22%20Amari/works">Fareeha "Pharah" Amari</a></li> <li class="characters"><a class="tag" href="/tags/Angela%20%22Mercy%22%20Ziegler/works">Angela "Mercy" Ziegler</a></li> <li class="characters"><a class="tag" href="/tags/Winston%20(Overwatch)/works">Winston (Overwatch)</a></li> <li class="characters"><a class="tag" href="/tags/Lena%20%22Tracer%22%20Oxton/works">Lena "Tracer" Oxton</a></li><li class="freeforms"><a class="tag" href="/tags/Tiny%20Pharah%20and%20Tiny%20Mercy/works">Tiny Pharah and Tiny Mercy</a></li> <li class="freeforms"><a class="tag" href="/tags/Fluff/works">Fluff</a></li> <li class="freeforms last"><a class="tag" href="/tags/Cute/works">Cute</a></li> 
    </ul> 
    <!--summary--> 
    <h6 class="landmark heading">Summary</h6> 
    <blockquote class="userstuff summary"> 
     <p>Angela and Fareeha wake up to find tiny alternate versions of themselves have appeared and are now imprinted on them. How will these tiny Pharahs and Mercies impact their work at Overwatch and more importantly how will it impact the feelings they have for each other.</p> 
    </blockquote> 
    <!--stats--> 

    <dl class="stats"> 
     <dt class="language">Language:</dt> 
     <dd class="language">English</dd> 
    <dt class="words">Words:</dt> 
    <dd class="words">35,143</dd> 
    <dt class="chapters">Chapters:</dt> 
    <dd class="chapters">10/11</dd> 
    <dt class="comments">Comments:</dt> 
    <dd class="comments"><a href="/works/10504812?show_comments=true&amp;view_full_work=true#comments">168</a></dd> 
    <dt class="kudos">Kudos:</dt> 
    <dd class="kudos"><a href="/works/10504812?view_full_work=true#comments">438</a></dd> 
    <dt class="bookmarks">Bookmarks:</dt> 
    <dd class="bookmarks"><a href="/works/10504812/bookmarks">35</a></dd> 
    <dt class="hits">Hits:</dt> 
    <dd class="hits">5890</dd> 
    </dl> 
</li> 

を(順序付きリストタグがコンテキストに追加された)と基本的に私は、タイトル、作者、URL、概要、および格付けを抽出するために望んでいました。

これまでのところ、私が抽出したいアイテムの場所を集めましたが、実際にどのように行うのかわかりません。

タイトル:

<a href="/works/10504812">Pocket Healer</a> 

著者:

<a rel="author" href="https://stackoverflow.com/users/OverNoot/pseuds/OverNoot">OverNoot</a> 

URL:

<li class="work blurb group" id="work_10504812" role="article"> 
<!--(http://archiveofourown.com/works/<the number after 'work_'>)--> 

概要:

<blockquote class="userstuff summary"> 
    <p> (SUMMARY GOES HERE) </p> 
</blockquote> 

評価:

<li> <a class="help symbol question modal modal-attached" title="Symbols key" aria-controls="#modal" href="/help/symbols-key.html"><span class="rating-general-audience rating" title="General Audiences"><span class="text">General Audiences</span></span></a></li> 

追加質問:それはforloopのようなものに順序付けられたリストの内容を反復処理することは可能ですか?

ウェブページを開くために設定した現在のコードは以下のとおりです。

while (true) { 
     try { 

      String url = "http://archiveofourown.org/tags/Fareeha%20%22Pharah%22%20Amari*s*Angela%20%22Mercy%22%20Ziegler/works"; 
      Document doc = Jsoup.connect(url).get(); 

      //Returns element of webpage 
      doc.select("<Narrow down to ordered list>"); 

      //Run for loop to run through first 5 items of 
      Thread.sleep(THIRTY_MINUTES); 

     } 
     catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

    } 

答えて

0

あなたが反復処理することができますElementsを返すDocument.select(String cssSelector)方法を使用することができます。たとえば、ol.work > liは、liのすべての要素をこの第1レベルの子要素ol.work要素に返します。これを使用してすべてのストーリーを反復することができます。

は、コードの一部を次の点を考慮

Elements ol = doc.select("ol.work > li"); 

for (Element li : ol) { 
    String title = li.select("h4.heading a").first().text(); 
    String author = li.select("h4.heading a[rel=author]").text(); 
    String id = li.attr("id").replaceAll("work_",""); 
    String url = "http://archiveofourown.com/works/" + id; 
    String summary = li.select("blockquote.summary").text(); 
    String rating = li.select("span.rating").text(); 

    System.out.println("Title: " + title); 
    System.out.println("Author: " + author); 
    System.out.println("ID: " + id); 
    System.out.println("URL: " + url); 
    System.out.println("Summary: " + summary); 
    System.out.println("Rating: " + rating); 
} 

この例では、forループ内のすべてのliの要素を取得し、予想されるコンテンツを抽出します。ご覧のとおり、li要素に制限されているすべてのデータ抽出に対してselectメソッドを使用します。 Element.text()メソッドは要素の本文をプレーンテキストとして返し、存在する場合はすべてのタグを削除します。私はそれが役に立てば幸い

Title: Pocket Healer 
Author: OverNoot 
ID: 10504812 
URL: http://archiveofourown.com/works/10504812 
Summary: Angela and Fareeha wake up to find tiny alternate versions of themselves have appeared and are now imprinted on them. How will these tiny Pharahs and Mercies impact their work at Overwatch and more importantly how will it impact the feelings they have for each other. 
Rating: General Audiences 

あなたは、あなたの質問に入れてHTMLで実行されている次のコードは、次の出力を生成します。

+0

ありがとうございました。そのものは私に頭痛を与えていましたが、私のコードで完璧に動作します。とても有難い!私は、私はあなたを助けることができるうれしい – Jayps

+0

@Jayps :) –

+0

は今、私はC#で同じことをやってテストしたい、私はそれが同じように働くだろうと仮定?私はちょうどjsoup(C#用)に似た別のライブラリを見つける必要がありますか? – Jayps

関連する問題