2

フォーラムから既にクロールして保存したこの html ファイルがあります。クロールされたデータからすべてのスレッド タイトルを抽出したいのですが、問題は、スレッド タイトルの一部を出力できますが、すべてではなく、スレッド タイトルの一部をスキップすることです。

実際の HTML のサンプルを添付しました。注: "threadbits_forum_2" 2 は実行中の番号です

<tbody id="threadbits_forum_2">
<tr>
    <td>Thread1</td>
</tr>
<tr>
    <td>Thread2</td>
</tr>
<tr>
    <td>Thread3</td>
</tr>
<tr>
    <td>Thread4</td>
</tr>
.
.
.
.
</tbody>

Java コーディング:

        Document doc = Jsoup.parse(html);

        Elements threadsList = doc.select("tbody[id^=threadbits_forum]").select("tr");
        System.out.println(threadsList.toString());

結果:

 <tbody id="threadbits_forum_2">
<tr>
    <td>Thread2</td>
</tr>
<tr>
    <td>Thread4</td>
</tr>

すべてのスレッドのタイトルを取得するための回避策はありますか?

私の投稿を読んでくれてありがとう。

キース

4

2 に答える 2

2

すべての名前をスキャンするには、for() ステートメントを使用する必要があります。

Elements threadsList = doc.select("tr");
for(thread : threadsList){
      String title;
      Elements titles = thread.select("td");
      title = titles.text();
}

それぞれに属性があると役立ちます。したがって、単に tr または td ではなく、select("tr[class=threadClass]") のようなものになります。それぞれに属性を投稿していないだけだと思います。

そのようなことを試してみてください。

編集: JSoup がどのように機能するかを説明しようとします。それを使用してコーディングする方法について、より良いアイデアが得られるかもしれません。Elements オブジェクトを作成するときは、select() メソッドでスキャンする要素を指定します。そのため、すべての HTML をスキャンして、tr または td を含む要素を探します。次に、それらを Elements 配列に入れます。次に、その配列を for() ステートメントでスキャンして、それらの要素から必要な情報を取得する必要があります。属性なしで要素のみを指定すると、tr または td 要素を含む HTML の任意の部分が取得されます。通常、サイトにはこれらの要素を含む複数の領域があり、必要以上に返されるため、これは通常エラーを引き起こします。

于 2013-07-15T18:30:47.343 に答える