0

非常に複雑であることが判明した Python で一見単純なことを行う必要があります。私がする必要があるのは:

  1. HTML ファイルを開きます。
  2. など、特定の HTML 要素のすべてのインスタンスに一致しますtable
  3. インスタンスごとに、要素を文字列として抽出し、その文字列を外部コマンドに渡して変更を加え、最後に元の要素を外部コマンドから返された新しい文字列に置き換えます。

re.sub()それぞれの場合で置換文字列が異なり、元の文字列に基づいているため、単に a を実行することはできません。

助言がありますか?

4

3 に答える 3

1

Beautiful Soupを使用してこれを行うことができます。

必要なものについては、lxml.etreeのようなより単純なものがうまく機能します。

于 2012-04-18T16:52:48.737 に答える
0

BeautifulSoupが必要なようですね。おそらく、次のようなことをしたいと思うでしょう:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)

tables = soup.find_all( 'table' )
for table in tables:
    contents = str( table.contents )
    new_contents = transform( contents )
    table.replaceWith( new_contents )

または、より近いものを探しているかもしれませんsoup.replace_with

編集:最終的な解決策に更新されました。

于 2012-04-18T16:54:03.690 に答える
0

BeautifulSoup またはその他のそのような解析を介した HTML の解析は、さまざまなページを解析する必要があるため複雑になることがわかりました。構造が異なる場合があり、整形式ではない場合があり、javascript 操作などを使用する必要があります。この場合の最善の解決策は、ブラウザに直接アクセスすることです。 DOM と変更およびクエリ ノード。これは、 phanotomjsのようなヘッドレス ブラウザで簡単に実行できます。 たとえば、ここに phantomjs スクリプトがあります。

var page = require('webpage').create();

page.content = '<html><body><table><tr><td>1</td><td>2</td></tr></table></html>';
page.evaluate(function () {
    var elems = document.getElementsByTagName('td')
    for(var i=0;i<elems.length;i++){
        elems[i].innerHTML = '!'+elems[i].innerHTML+'!';
    }
});
console.log(page.content);
phantom.exit();

すべてのtdテキストを変更し、出力は

<html><head></head><body><table><tbody><tr><td>!1!</td><td>!2!</td></tr></tbody></table></body></html>
于 2012-04-18T19:49:43.453 に答える