BS4:如何删除不必要的html标签,仅保留<p>和<ruby>标签?

时间:2018-07-26 17:03:41

标签: python python-3.x web-scraping beautifulsoup

我很可能可以使用正则表达式来完成此操作,但我觉得必须有一种更简单的方法来完成此操作。我倾向于使所有事情变得比应有的悲伤难。

f, axes = plt.subplots(2, 2, figsize=(7, 7), sharey=True, sharex=True)

axes[0,0].bar([*dictlist[0].keys()], [*dictlist[0].values()])
axes[0,0].set_xlabel(quarters[0])
for p in axes[0,0].patches:
    axes[0,0].annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()))
for tick in axes[0,0].get_xticklabels():
    tick.set_rotation(90)


axes[0,1].bar([*dictlist[1].keys()], [*dictlist[1].values()])
axes[0,1].set_xlabel(quarters[1])
for p in axes[0,1].patches:
    axes[0,1].annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()))
for tick in axes[0,1].get_xticklabels():
    tick.set_rotation(90)


axes[1,0].bar([*dictlist[2].keys()], [*dictlist[2].values()])
axes[1,0].set_xlabel(quarters[2])
for p in axes[1,0].patches:
    axes[1,0].annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()))
for tick in axes[1,0].get_xticklabels():
    tick.set_rotation(90)


axes[1,1].bar([*dictlist[3].keys()], [*dictlist[3].values()])
axes[1,1].set_xlabel(quarters[3])
for p in axes[1,1].patches:
    axes[1,1].annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()))
for tick in axes[1,1].get_xticklabels():
    tick.set_rotation(90)


fig = plt.gcf()
fig.set_size_inches( 16, 16)

plt.tight_layout()

2 个答案:

答案 0 :(得分:1)

赞:

data = BeautifulSoup(your_html, 'html.parser')
clean_data = (data.find_all('p'),data.find_all('ruby'))
print(clean_data)

要在这些标签中获取内容/文本,

p_text = clean_data.find_all('p').get_text()

让我知道这是否可行。

答案 1 :(得分:1)

您可以使用BeautifulSoup中内置的CSS选择器:

data = '''<p><span class="colorL"><ruby>三重県<rt>みえけん</rt></ruby></span>の<span class="colorL"><ruby>伊賀市<rt>いがし</rt></ruby></span>は、<a class="dicWin" href="javascript:void(0)" id="id-0000"><ruby><span class="under">忍者</span><rt>にんじゃ</rt></ruby></a>の<a class="dicWin" href="javascript:void(0)" id="id-0001"><span class="under">ふるさと</span></a>だと<ruby>言<rt>い</rt></ruby>われています。</p>'''

from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'lxml')
print(soup.select('ruby, p'))

这将仅选择<ruby><p>标签:

[<ruby>言<rt>い</rt></ruby>, <ruby>三重県<rt>みえけん</rt></ruby>, <ruby>伊賀市<rt>いがし</rt></ruby>, <ruby><span class="under">忍者</span><rt>にんじゃ</rt></ruby>, <p><span class="colorL"><ruby>三重県<rt>みえけん</rt></ruby></span>の<span class="colorL"><ruby>伊賀市<rt>いがし</rt></ruby></span>は、<a class="dicWin" href="javascript:void(0)" id="id-0000"><ruby><span class="under">忍者</span><rt>にんじゃ</rt></ruby></a>の<a class="dicWin" href="javascript:void(0)" id="id-0001"><span class="under">ふるさと</span></a>だと<ruby>言<rt>い</rt></ruby>われています。</p>]