首页 > 解决方案 > 只获取一些标签

使用网站上的 BeautifulSoup

问题描述

我尝试仅从 selectet 标签中获取文本,例如:

<div class="article-container">
  <p>tekst 1</p> <!-- this tag -->
  <p>none</p>
  <p>tekst 2</p> <!-- this tag -->
  <p>none</p>
  <p>tekst 3</p> <!-- this tag -->
  <p>none</p>
  <p>tekst 4</p> <!-- this tag -->
</div>

我尝试获取'tekst 1 tekst 2 tekst 3 tekst 4'(但标签中的文本完全不同'tekst 1'等只是示例),

我的简单 python 函数如下所示:

def get_article(url):
    page = requests.get(str(url))
    soup = BeautifulSoup(page.text, 'html.parser')

    article = soup.find(class_='article-container')

    article_only = article.text

    return(article_only)

但他返回了整个文本。有没有办法像上面的例子一样使用 BS 来获取选定的元素?

标签: pythonbeautifulsoup

解决方案


所以你只需要 1,3,5,7 元素,你可以这样做:

代码:

from bs4 import BeautifulSoup as soup

html = """<div class="article-intro">
<p>tekst 1</p>
<p>none</p>
<p>tekst 2</p>
<p>none</p>
<p>tekst 3</p>
<p>none</p>
<p>tekst 4</p>
</div>"""

page = soup(html, 'html.parser')
div = page.find('div',{'class':'article-intro'})
ps = div.find_all('p')
for i in range(len(ps)):
    if i % 2 == 0:
        print(ps[i].text)

输出:

tekst 1
tekst 2
tekst 3
tekst 4

推荐阅读