4

以下が HTML ドキュメントのサブセットであると仮定します...複数のテーブルが繰り返されていることに注意してください。ただし、<a name="1">「2」、「3」、「4」など、テーブルごとに異なるテキストが含まれる場合があります。

<table align="center" width="550">
<tr>
<td valign="top" width="300"><b>Product:</b></img></td>
<td>
<a name="1"></a>1) Text Editor
<p>An application for the editing of text files.</p>
<br>
<b>Application Name: Notepad</b>
<br>            
<b>Type: Writing</b>
<br><br></td>
</tr>
</table>

特定の「#」(この場合は 1) に等しい「a」タグを見つけて、「1) テキスト エディター」のテキストを取得できるようにしたいと考えています。

ドキュメント全体をbeautifulsoupedした場合、findAll("table")すべてのテーブルを提供するようなものを使用できることはわかっていますが、どうすればその値に到達できるかわかりません。のようなことができるかもしれませんがfindAll("a")、「名前」を (この場合は 1) と等しくなるように指定するにはどうすればよいでしょうか? それができたとしても、その「a」タグが空なので「1)テキストエディタ」にたどり着けず、「<b>Application Name: Notepad</b>」の部分などにもたどり着けませんでした。

python/beautifulsoupの組み合わせによる最良の解決策は何ですか、または、テーブルの「1)テキストエディタ」と「アプリケーション名」と「タイプ」の部分を取得するためのより良い方法がある場合は、そこにあるという事実に基づいています<a name="1"></a>それに先行する?サンプル構文は素晴らしいでしょう。

4

2 に答える 2

1

の辞書を簡単に渡しattrsて照合できるようです。これにはname属性が含まれているようです。

http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#arg-attrs

soup.findAll(attrs={'name' : '1'})

まだチェックしていない場合は、ドキュメントに、HTML ドキュメント内の要素を見つける方法に関する非常に優れた例がたくさんあります。

于 2012-10-28T19:25:43.010 に答える
1

で属性を指定できますfindAll...

>>> a = soup.findAll("a", attrs={"name": "1"})[0]

...そして次のノードを取得します...

>>> a.next
u'1) Text Editor\n'

...そして次の<b>要素...

>>> a.findNext("b")
<b>Application Name: Notepad</b>

... 等々。

ちなみに、 は への特別な引数でattrsあるため、引数が必要なだけです。それが他の属性だった場合は、たとえば使用できたはずですnamefindAll()

>>> a = soup.findAll("a", href="whatever")
于 2012-10-28T19:34:36.777 に答える