0

私はいくつかの html ファイルを持っていて、いくつかのタグの間のコンテンツを抽出したいと考えています。

<p>A paragraph comes here</p>
<p>A paragraph comes here</p><span class="more-about">Some text here</span><p class="en-cpy">Copyright &copy; 2012 </p>

これらのタグが必要なだけです: head, p ですが、2 番目の段落でわかるように、最後のタグは p で始まりますが、私の欲望タグではなく、そのコンテンツは必要ありません。目的のテキストを抽出するために次のスクリプトを使用しましたが、例の最後のタグなどのタグを除外することはできません....<p>タグだけを抽出するにはどうすればよいですか?

grep "<p>" $File | sed -e 's/^[ \t]*//'

追加する必要があるのは、最後のタグ (出力に表示したくない) が目的のタグの 1 つの直後にあり (私の例のように)、grep コマンドを使用すると、その行のすべてのコンテンツが返されることです。出力として...(これは私の問題です)

4

3 に答える 3

3

しないでください。HTMLregexをパースするために使おうとするのは大変ことです。やのようなもの、または使い慣れた同様の言語 + ライブラリを使用してください。RubyNokogiri

于 2012-07-02T05:49:58.433 に答える
0
xmllint --html --xpath "//*[name()='head' or name()='p']" "$file"

壊れた HTML を扱っている場合は、別のパーサーが必要になることがあります。これは、 を使用した基本的に同じ「ワンライナー」lxmlです。スクリプトに URL を渡すだけです

#!/usr/bin/env python3
from lxml import etree
import sys

print('\n'.join(etree.tostring(x, encoding="utf-8", with_tail=False).decode("utf-8") for x in (lambda i: etree.parse(i, etree.HTMLParser(remove_blank_text=1, remove_comments=1)).xpath("//*[name()='p' or name()='head']"))(sys.argv[0])))
于 2012-07-02T06:06:08.017 に答える
0

<p> と </p> の間のテキストを抽出するには、これを試してください

perl -ne 'BEGIN{$/="</p>";$\="\n"}s/.*(<p>)/$1/&&print' < input-file > output-file

また

perl -n0l012e 'print for m|<p>.*?</p>|gs'
于 2012-07-02T07:29:06.003 に答える