使用python beautifulsoup将文本转换为div

时间:2018-02-22 01:59:51

标签: python beautifulsoup

我正在学习python和lib beatifulsoup来做一些爬虫,我想从html代码中提取文本,但文本不是标记。看代码

我的bs4代码是这样的:

for p in soup.find_all("div", class_="description__container-text"):
    v1 = p
    for x in v1:
        print(v1)

输出是这样的:

<div class="description__container-text" itemprop="description"> 
    <h2 class="description__product-title">
        TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT” HD
    </h2> 
    <p class="description__text"></p> 
    *********I WANT TO EXTRACT THIS TEXT HEAR!!!!!!*************************************************** 
    <p class="description__text"></p> 
    <p class="description__text"> 
        <center>
            <iframe frameborder="0" height="6500" src="https://myurl.html" width="100%"></iframe>
        </center>

那么,我怎样才能得到文字:

*********I WANT TO EXTRACT THIS TEXT HEAR!!!!!!***************************************************

2 个答案:

答案 0 :(得分:0)

一种方法是从div元素中获取所有文本,然后使用str.replace()

减去不需要的其他文本

这是一个删除h2文本并修剪最终结果以消除空白的示例

from bs4 import BeautifulSoup


doc = """
<div class="description__container-text" itemprop="description"> <h2                          class="description__product-title">TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT” HD</h2>
 <p class="description__text"></p> *********I WANT TO EXTRACT THIS TEXT                       HEAR!!!!!!***************************************************
    <p class="description__text"></p>
 <p class="description__text"> <center><iframe frameborder="0" height="6500" src="https://    myurl.html" width="100%"></iframe></center>
</p>
</div>
"""
soup = BeautifulSoup(doc, 'html.parser')
print("all text: %s" % soup.get_text())
allText = soup.get_text()
h2Text = soup.find('h2').get_text()
# separate h2 text
print("h2 text: %s" %h2Text)
# remove h2 text from all text
modifiedAllText = allText.replace(h2Text, '')
print("Modified: %s" % modifiedAllText.strip())

答案 1 :(得分:0)

这取决于您希望如何指定所需的项目。我将假设您要将p元素后面的文本指定为class&#39; description_text&#39;。但我描述的方法更为普遍。

首先找到一个包含您要查找的元素的元素。在这种情况下,我选择了div。然后浏览该元素的后代,直到看到一个紧接在你想要的那个之后。

出于说明目的(以及我自己的懒惰),我还没有以循环的形式写出来。使用items = div.descendantsitems中获取迭代器。然后使用next依次在div中获取item的每个后代。

如果item.name为空,则item为字符串,否则item.name为该标记命名。当您看到上面提到的p标记时,您就知道下一个项目将是您真正想要的文本项目。

>>> import bs4
>>> soup = bs4.BeautifulSoup(open('bueno.htm').read(), 'lxml')
>>> div = soup.find('div')
>>> items = div.descendants
>>> item = next(items)
>>> item.name
>>> item
' '
>>> item = next(items)
>>> item.name
'h2'
>>> item
<h2 class="description__product-title">TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT” HD</h2>
>>> item = next(items)
>>> item.name
>>> item
'TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT” HD'
>>> item = next(items)
>>> item.name
>>> item
' '
>>> item = next(items)
>>> item.name
'p'
>>> item
<p class="description__text"></p>
>>> item = next(items)
>>> item.name
>>> item
' *********I WANT TO EXTRACT THIS TEXT HEAR!!!!!!*************************************************** \n    '