问题描述
我正在创建一个从网站收集数据的脚本。但是,我遇到了一些问题,只能收集特定信息。导致我出现问题的 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])