3

正規表現を使用してhtml出力からコンテンツをlibxml2に抽出するいくつかのpythonスクリプトを変換していますが、これから始めるので、少し助けていただければ幸いです。

lxmlを使用して、次の例の「作業ディレクトリ」、「パッケージ/更新」、および「Javaデータモデル」から値を抽出するにはどうすればよいですか?

<tr>
  <script>writeTD("row");</script>
  <td class="oddrow"><nobr>Working Dir</nobr></td>
  <script>writeTD("rowdata-l");</script>
  <td class="oddrowdata-l">/serves/test_servers</td>
</tr> 
<script>swapRows();</script>
<tr>
  <script>writeTD("row");</script>
  <td class="evenrow"><nobr>Packages/Updates</nobr></td>
  <script>writeTD("rowdata-l");</script>
  <td class="evenrowdata-l"><a href="updates.dsp">View</a></td>
</tr> 
<script>swapRows();</script>
<tr>
  <script>writeTD("row");</script>
  <td class="oddrow"><nobr>Java Data Model</nobr></td>
  <script>writeTD("rowdata-l");</script>
  <td class="oddrowdata-l">64-bit</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>

前もって感謝します。

4

1 に答える 1

5

として投稿した HTML を使用してcontent

import lxml.html as LH
doc = LH.fromstring(content)
tds = (td.text_content() for td in doc.xpath('//td'))    
for td, val in zip(*[tds]*2):
    if td in ("Working Dir", "Java Data Model"):
        print(td,val)

収量

('Working Dir', '/serves/test_servers')
('Java Data Model', '64-bit')

この行は、ほとんどの作業を行います。

tds = (td.text_content() for td in doc.xpath('//td'))

メソッドを使用してすべてのタグxpath()を検索します。<td>メソッドを使用してtext_content()、関連付けられたテキストを抽出します。

zip(*[tds]*2)は、ペアで反復処理するグルーパー イディオムです。tds

for td, val in zip(*[tds]*2):
    print(td,val)

<td>これは、ラベルと値が交互に続くことを前提としていることに注意してください。

于 2012-08-03T12:04:22.767 に答える