私はBeautifulSoupを使っていくつかの古代のHTMLファイルの相対URLをアーカイブサイトから絶対URLに変換しています(ほとんどの場合、.htaccessルールでより良いターゲットにすることができます)。この部分は私がダウンしている:特定のタグとそのattを検索し、urllib.parse.urljoin(これはPython3)を使って修正する。ファイン。BeautifulSoupとphp/htmlファイル
しかし、このWebサイトの後年から、このコレクションにもいくつかの.phpファイルがあります。彼らは主に他の.phpファイルを含めるために3-5行を使用し、残りはHTMLですが、いくつかの例外があります。
問題: BeautifulSoupパーサーは、<?php ?>
タグを解釈しようとします。実際に、彼らはちょうど角括弧を投げるが、疑問符を残す例があるように見える - 私はhackishlyので、対処行動:
for c in soup.contents:
c = str(c) # previously a BeautifulSoup Tag
# I don't need soup after this point, hence not reconstructing contents
c = ('<' if c.startswith('?') else '') + c
c = c + ('>' if c.endswith('?') else '')
しかし、いずれにしても、私はその全体<?php ?>
タグに気づきましたパーサに応じて異なる方法で、しばしば混乱しました。
<?
//echo "BEGIN PAGE: " . $_SESSION["i"]."<br>";
include ('util.php');
をそして<br>
を閉じ>
で終わるようにタグを解釈:たとえば、html5libパーサーは、これらの行を取ります。
私が起こることを望むのは、PHPタグを単独で放置することです。 (もちろん、理想的な世界では、パーサーは、それらを介して読んでいましたし、任意の内側のHTML上で動作し、それはあまりにも多くを求めるように思える!)
可能な解決策
- は、ファイルを.phpのスキップのみ.htmlを使って作業する - 作業は必須ではなく、最適化だけなので大きな損失は発生しません。
- これらのケースをよりよく処理するドキュメントには記載されていないBeautifulSoupパーサーがあります。
- テキストをあらかじめ解析して、すべて
<?php ?>
ブロックを抽出し、BeautifulSoupの作業が完了した後に再挿入します。これらのファイルの何千ものファイルのうち、 HTML行など) - 上記と同様に、すべての
<?php ?>
タグをパーサーからプログラムで保護します。 ...彼らの周りのHTMLコメントを挿入して、自分の質問に答えるためにスープ
自分の質問に対する回答がある場合は、その質問に質問を含めるのではなく、回答として追加することができます。 –
答えが分かっていれば、なぜあなたはそれを尋ねますか? – Juggernaut
このフォーマットに慣れていないと変わって見えるかもしれませんが、それを行うのが好ましい方法です。 [詳細については、ヘルプセンターを参照してください。] –