从HTML标签和纯文本中提取文本(不包含在标签中)

时间:2018-04-20 20:36:57

标签: python html python-3.x beautifulsoup

<p class="qotCJE">
<a href="https://ejje.weblio.jp/content/to+pay" title="to payの意味" class="crosslink">to pay</a> 
<a href="https://ejje.weblio.jp/content/charges" title="chargesの意味" class="crosslink">charges</a> 
from one's 
<a href="https://ejje.weblio.jp/content/bank+account" title="bank accountの意味" class="crosslink">bank account</a>
</p>

我正在尝试重建句子&#34;从某个银行帐户支付费用&#34;这分为上面的HTML代码。我的问题是句子的一部分没有包装在HTML标签内。当我尝试使用时:

BeautifulSoup.find_all()

我只在链接标记和我尝试使用

之间获取文本
BeautifulSoup.contents

我只能从一个人那里得到&#34;&#34;但不是链接标签之间的文本。

有没有办法完成这段代码并重建句子?

修改 上面的代码只是一个例子,我试图刮字典,所以字符串的顺序和哪些部分将是内部/外部标签将是任意的。

3 个答案:

答案 0 :(得分:1)

修改 在深入挖掘字典网站之后,我想出了以下解决方案。在句子的每个<p>标记下,我们可以执行以下操作:

from bs4.element import Tag
from bs4.element import NavigableString


res = []

for segment in p.contents:
    if isinstance(segment, NavigableString):
        res.append(segment)
    elif isinstance(segment, Tag):
        res.append(segment.text)

final_sentence = ''.join(res[:-2])

希望有所帮助

如果您只想从title属性中提取文字,则可以

# assuming text is the html text given above
soup = BeautifulSoup(text, 'html5lib')
a_tags = soup.select('a')
a_strs = (a['title'] for a in a_tags)
final_sentence = "{} {} from one's {}".format(a_strs)

答案 1 :(得分:1)

from bs4 import BeautifulSoup

html = """<p class="qotCJE">
<a href="https://ejje.weblio.jp/content/to+pay" title="to payの意味" class="crosslink">to pay</a>
<a href="https://ejje.weblio.jp/content/charges" title="chargesの意味" class="crosslink">charges</a>
from one's
<a href="https://ejje.weblio.jp/content/bank+account" title="bank accountの意味" class="crosslink">bank account</a>
</p>"""

soup = BeautifulSoup(html)

print(soup.text)
# to pay
# charges
# from one's
# bank account

print(soup.text.replace('\n', ' '))
# to pay charges from one's bank account 

答案 2 :(得分:0)

实现相同目标的另一种方法:

from bs4 import BeautifulSoup

content = """
<p class="qotCJE">
<a href="https://ejje.weblio.jp/content/to+pay" title="to payの意味" class="crosslink">to pay</a>
<a href="https://ejje.weblio.jp/content/charges" title="chargesの意味" class="crosslink">charges</a>
from one's
<a href="https://ejje.weblio.jp/content/bank+account" title="bank accountの意味" class="crosslink">bank account</a>
</p>
"""
soup = BeautifulSoup(content,"lxml")
print(soup.get_text(" ",strip=True))

输出:

to pay charges from one's bank account