削り取られたhtmlコンテンツをクリーンアップするPythonスクリプトがあります。これは、BeautifulSoup4を使用しており、非常にうまく機能します。最近、私はlxmlを学ぶことにしましたが、チュートリアルに従うのが(私にとって)難しいことがわかりました。たとえば、次のコードを使用して、複数の<br />
タグを1つにマージします。つまり、複数のタグがある場合は、1つ<br />
だけを残して、すべてを削除します。
from bs4 import BeautifulSoup, Tag
data = 'foo<br /><br>bar. <p>foo<br/><br id="1"><br/>bar'
soup = BeautifulSoup(data)
for br in soup.find_all("br"):
while isinstance(br.next_sibling, Tag) and br.next_sibling.name == 'br':
br.next_sibling.extract()
print soup
<html><body><p>foo<br/>bar. </p><p>foo<br/>bar</p></body></html>
lxmlでこれと同様の方法を実現するにはどうすればよいですか?ありがとう、
タグの.drop_tag()
重複した連続した出現を削除する方法を試すことができます<br/>
:
from lxml import html
doc = html.fromstring(data)
for br in doc.findall('.//br'):
if br.tail is None: # no text immediately after <br> tag
for dup in br.itersiblings():
if dup.tag != 'br': # don't merge if there is another tag inbetween
break
dup.drop_tag()
if dup.tail is not None: # don't merge if there is a text inbetween
break
print(html.tostring(doc))
# -> <div><p>foo<br>bar. </p><p>foo<br>bar</p></div>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加