微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

BeautifulSoup - 从标签中获取所有孩子而不是第一个

如何解决BeautifulSoup - 从标签中获取所有孩子而不是第一个

我正在创建一个从网站收集数据的脚本。但是,我遇到了一些问题,只能收集特定信息。导致我出现问题的 HTML 部分如下:

<div class="Content">
  <article>
    <blockquote class="messageText 1234">
      I WANT THIS
      <br/>
      I WANT THIS 2
      <br/>
      </a>
      <br/>
    </blockquote>
  </article>
</div>
<div class="Content">
  <article>
    <blockquote class="messageText 1234">
      <a class="IDENTIFIER" href="WEBSITE">

      </a>
      NO WANT THIS
      <br/>
      <br/>
      NO WANT THIS
      <br/>
      <br/>
      NO WANT THIS
      <div class="messageTextEndMarker">
      </div>
    </blockquote>
  </article>
</div>

而且我正在尝试创建一个仅打印“我想要这个”部分的流程。我有以下脚本:

import requests
from bs4 import BeautifulSoup

url = ''
page = requests.get(url)

soup = BeautifulSoup(page.content,'html.parser')

for a in soup.find_all('div',class_='panels'):
    for b in a.find_all('form',class_='section'):
            for c in b.find_all('div',class_='message'):
                    for d in c.find_all('div',class_='primaryContent'):
                             for d in d.find_all('div',class_='messageContent'):
                                     for e in d.content.find_all('blockquote',class_='messageText 1234')[0]:
                                        print(e.string)

我对代码的想法是只从第一个 blockquote 元素中提取部分,但是,我从 blockquotes获取所有文本:

 I WANT THIS
 NO WANT THIS

NO WANT THIS

NO WANT THIS

我怎样才能做到这一点?

解决方法

为什么不使用 select_one 来隔离第一个块,然后使用 stripped_strings 来分离文本字符串?

from bs4 import BeautifulSoup as bs

html = ''' your html'''
soup = bs(html,'lxml')
print([s for s in soup.select_one('.Content .messageText').stripped_strings])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。