从特定块中获取文本,不包括一些嵌套标签
Get text from specific blocks excluding some nested tags
我一直在尝试制作一个 Python 脚本,它实际上从特定元素块中提取文本,但必须排除嵌套兄弟元素中的一些文本。
这是我要抓取的 HTML 部分:
<div class="article_body">
<div id="articleBodyContents">
Stack Overflow
<br/>
Is Love
<br/>
<a href="https://example_site1.com" target="_blank">Ad</a>
<br/>
<a href="https://example_site2.com" target="_blank">Ad2</a>
</div>
</div>
这是到目前为止我取得的进步:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
divs = soup.findAll('div', {'id':'articleBodyContents'})
for ops in divs:
print(ops.text.replace('\n', '').strip())
但是打印出来的是:
Stack Overflow
Is love
Ad
Ad2
我想要的只有:
Stack Overflow
Is love
你快到了。您需要 NavigableString
的帮助才能实现此目的。只需捕获前一个父级,并对其进行迭代检查字符串是否是 NavigableString
的实例。这是您的代码:
from bs4 import BeautifulSoup, NavigableString
html = """
<div class="article_body">
<div id="articleBodyContents">
Stack Overflow
<br/>
Is love
<br/>
<a href="https://example_site1.com" target="_blank">Ad</a>
<br/>
<a href="https://example_site2.com" target="_blank">Ad2</a>
</div>
</div>
"""
soup = BeautifulSoup(html, "html.parser")
divs = soup.find('div', {'class':'article_body'})
ops = [element for element in divs.div if isinstance(element, NavigableString)]
for op in ops:
print(op.strip().replace('\n', ''))
输出:
Stack Overflow
Is love
我一直在尝试制作一个 Python 脚本,它实际上从特定元素块中提取文本,但必须排除嵌套兄弟元素中的一些文本。
这是我要抓取的 HTML 部分:
<div class="article_body">
<div id="articleBodyContents">
Stack Overflow
<br/>
Is Love
<br/>
<a href="https://example_site1.com" target="_blank">Ad</a>
<br/>
<a href="https://example_site2.com" target="_blank">Ad2</a>
</div>
</div>
这是到目前为止我取得的进步:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
divs = soup.findAll('div', {'id':'articleBodyContents'})
for ops in divs:
print(ops.text.replace('\n', '').strip())
但是打印出来的是:
Stack Overflow
Is love
Ad
Ad2
我想要的只有:
Stack Overflow
Is love
你快到了。您需要 NavigableString
的帮助才能实现此目的。只需捕获前一个父级,并对其进行迭代检查字符串是否是 NavigableString
的实例。这是您的代码:
from bs4 import BeautifulSoup, NavigableString
html = """
<div class="article_body">
<div id="articleBodyContents">
Stack Overflow
<br/>
Is love
<br/>
<a href="https://example_site1.com" target="_blank">Ad</a>
<br/>
<a href="https://example_site2.com" target="_blank">Ad2</a>
</div>
</div>
"""
soup = BeautifulSoup(html, "html.parser")
divs = soup.find('div', {'class':'article_body'})
ops = [element for element in divs.div if isinstance(element, NavigableString)]
for op in ops:
print(op.strip().replace('\n', ''))
输出:
Stack Overflow
Is love