1

それではシナリオです。JSoup を使用してスクレイピングしたい大きな html ファイルがあります。私はこれが初めてで、いくつかのチュートリアルと API リファレンスを使用しています。次の html ブロッ​​クがあります。

<p><a name="bob"></a>
<table class='schedules'>
<tr><td  align='center' colspan="5"><b>Bob the Builder</b><br>
<a href="blah blah" class='tiny'>Blah Blah Blah</a></td></tr>
<tr><td class='bk'><a href="random/randomUrl.htm">Blah</a></td><td class='bm'><a href="random/randomUrl.htm">Blah</a></td><td class='nm'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr><td class='bk'><a href="random/randomUrl.htm">Blah</a></td><td class='bk'><a href="random/randomUrl.htm">Blah</a></td><td class='nm'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr><td class='bk'><a href="random/randomUrl.htm">Blah</a></td><td class='bm'><a href="random/randomUrl.htm">Blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr><td class='bm'><a href="random/randomUrl.htm">Blah</a></td><!--<td class='whoohaa'><a href="random/randomUrl.htm">Blah</a></td>--><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='cc'><a href="random/randomUrl.htm">blah</a></td><td class='cc'><a href="random/randomUrl.htm">Blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td><td class='nm'><a href="random/randomUrl.htm">Blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">Blah</a></td></tr>
<tr><td class='sk'><a href="random/randomUrl.htm">Blah</a></td><td class='nm'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td><td class='sk'><a href="random/randomUrl.htm">blah</a></td></tr>
</table>
</p>

現在、同様のパターンに従ってこれらのブロックがさらに多くあり、(最初の行で) name 属性が (「bob」から別のものに) 変更されます。私がやりたいことは、最初に「ボブ」pブロックを選択してから、最後の行の終了pブロックまですべてのhtmlを取得できるようにすることです。

私は次のことを試みました:

Elements innerStuff = doc.select("a:contains(bob) ~ *");

しかし、href 属性のリンクのみが表示されます。これは、予想されることだと思います。しかし、私はこの問題を解決する方法を他に見つけるのに苦労していますか?

この点であなたの助けは非常に高く評価されています.

4

1 に答える 1

1

name 属性に基づいてタグを選択するより簡単な方法は次のとおりです。

doc.select("a[name=bob]")

そこから、(リンクを含む p タグを取得するために) parent() を使用して必要な要素に移動できるはずです (最初の (そして唯一の) 要素を取得する前に first() を呼び出す必要があります)。セレクターに一致する):

doc.select("a[name=bob]").first().parent()

ただし、1 つの問題: 解析された HTML ドキュメントは元の HTML とは異なります: 元の HTML 構造は次のとおりです。

p
    a[name=bob]
    table
        ...

解析された HTML は次のようになります。

p
    a[name=bob]
table
    ...
p

したがって、link タグから始めて、そのテーブルの要素を取得するには、1 つ上のレベル (段落まで) に移動して、次の要素を取得する必要があります。

doc.select("a[name=bob]").first().parent().nextElementSibling()
于 2012-11-11T12:24:57.513 に答える