1

いくつかのテーブルを含む HTML ファイルがあります。列 1 と列 3 のデータを名前 + 番号に変更したいと思います。この番号は、各行が更新されるたびに増加します。したがって、この:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">                              
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>blah blah doc</title>
<style type="text/css">
...
...
</style>
</head>
<body>
<!-- lots of html tags p h1, h2 ul etc but no tables to be skipped over -->
<table id="something" summary="...">
<thead>
<th ...</th>
...
</thead>
<tbody>
<tr>
    <td>mark jones</td>

        <td>blah blah</td>
        <td>mark jones</td>
        <td>blah blah</td>
        <td>11/12/2009</td>
        <td>blah blah</td>

 </tr>
 ...

次のようになります。

...
<tr>
    <td>name1</td>

        <td>blah blah</td>
        <td>name1</td>
        <td>blah blah</td>
        <td>11/12/2009</td>
        <td>blah blah</td>

 </tr>

表の前、後、および間には、他にも多数の HTML タグとテキストがあります。

上記は単なる行の例です。名前とその他の列データは各行で異なります。空白は、ソースを表示したときにどのように表示されるかです。Perl と Python にはかなり慣れていますが、これに取り組むには十分な知識がありません。

4

1 に答える 1

2

それがテーブルにあり、インストールされていると仮定しますlxml(そして、朝のコーヒーをまだ飲んでいないことに注意してください!):

html = """
<table>
<tr>
    <td>mark jones</td>

        <td>blah blah</td>
        <td>mark jones</td>
        <td>blah blah</td>
        <td>11/12/2009</td>
        <td>blah blah</td>

 </tr></table>"""

import lxml.html
import lxml.etree
from itertools import count


tree = lxml.html.fromstring(html)
next_name = lambda count=count(1): 'name{}'.format(next(count))
for trs in tree.findall('tr'):
    tds = trs.findall('td')
    anon_name = next_name()
    tds[0].text = anon_name
    tds[2].text = anon_name

print lxml.etree.tostring(tree)

あなたにあげる:

<table><tr><td>name1</td>

        <td>blah blah</td>
        <td>name1</td>
        <td>blah blah</td>
        <td>11/12/2009</td>
        <td>blah blah</td>

 </tr></table>
于 2013-02-08T09:35:32.603 に答える