【问题标题】:Return text surrounded by double tag with BeautifulSoup使用 BeautifulSoup 返回被双标签包围的文本
【发布时间】:2020-06-06 19:46:06
【问题描述】:

我正在使用 url 遍历列表。每页有 1 到 n 个描述,由双 p 标签包围。

BeautifulSoup.find(class_='view-content')

# url 1
<div class="view-content">
<div class="row">
<div class="description">
<p><p>One animal</p>
</p>
</div>
</div>
</div>

# url 2
<div class="view-content">
<div class="row">
<div class="description">
<p><p>One person</p>
</p>
</div>
</div>
<div class="row">
<div class="description">
<p><p>Two people </p>
</p>
</div>
</div>
</div>

当我使用时

for d in soup.find(class_='view-content').find_all('p'):
    dd = d.contents[0]
    print(dd)

我明白了

<p>One animal</p>One animal
<p>One person</p>One person
<p>Two people</p>Two people

而不是预期

One animal
One person
Two people

有什么方法可以检索被双 p 标签包围的内容?

编辑:以下返回相同,但至少没有 p 标签。

for d in soup.find_all("div",class_="view-content"):
    print(' '.join(i.text for i in review.find_all('p')[1:]))

【问题讨论】:

    标签: python html beautifulsoup tags


    【解决方案1】:

    另一种解决方案。

    from simplified_scrapy import SimplifiedDoc
    html = '''
    # url 1
    <div class="view-content">
    <div class="row">
    <div class="description">
    <p><p>One animal</p>
    </p>
    </div>
    </div>
    </div>
    
    # url 2
    <div class="view-content">
    <div class="row">
    <div class="description">
    <p><p>One person</p>
    </p>
    </div>
    </div>
    <div class="row">
    <div class="description">
    <p><p>Two people </p>
    </p>
    </div>
    </div>
    </div>
    '''
    doc = SimplifiedDoc(html)
    divs = doc.selects('div.view-content')
    datas=[]
    for div in divs:
      datas.extend ([p.text for p in div.ps])
    print (datas)
    

    结果:

    ['One animal', 'One person', 'Two people']
    

    【讨论】:

      猜你喜欢
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2010-10-26
      • 2012-12-25
      相关资源
      最近更新 更多