我正在学习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!!!!!!***************************************************
答案 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.descendants
在items
中获取迭代器。然后使用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 '