我正在尝试使用python和漂亮的汤bs4
我想将文本保留在页面的<p>
元素中,并将表情符号保留在此文本中。
第一次尝试是:
import urllib
import urllib.request
from bs4 import BeautifulSoup
urlobject = urllib.request.urlopen("https://example.com")
soup = BeautifulSoup(urlobject, "lxml")
result= list(map(lambda e: e.getText(), soup.find_all("p", {"class": "text"})))
但这不包括表情符号。然后,我尝试删除.getText()
并保留:
result= list(map(lambda e: e, soup.find_all("p", {"class": "text"})))
这让我意识到这个网站中的表情符号位于alt
标签的img
中:
<p class="text">I love the night<img alt="" class="emoji" src="etc"/><span>!</span></p>
所以我想做的是:
p
的{{1}}的getText()text
为alt
获得img
并将文本和表情符号保留为一个句子。
有什么办法吗?
任何帮助将不胜感激。
答案 0 :(得分:1)
接下来如何为每个int f(int a) {
int []res = {a, 1, a+1, 0};
return res[a % 4];
}
int getXor(int a, int b) {
return f(b) ^ f(a);
}
返回目标数据的元组?我只是两次将您的示例p
元素用作此测试的输入:
p
结果:
from bs4 import BeautifulSoup
s = """
<p class="text">I love the night<img alt="" class="emoji" src="etc"/><span>!</span></p>
<p class="text">I love the night<img alt="" class="emoji" src="etc"/><span>!</span></p>
"""
soup = BeautifulSoup(s, 'lxml')
elements = soup.find_all('p', {'class': 'text'})
print(list(map(lambda e: (e.getText(), e.find('img', {'class': 'emoji'})['alt']), elements)))
答案 1 :(得分:1)
如果img.emoji
是可选的,则可以在下面尝试,它将保留表情符号位置
urlobject = '''<p class="text">I love the night<img alt="" class="emoji" src="etc"/><span>!</span></p>
<p class="text">I love the day<span>!</span></p>
<p class="text">I love the music<img alt="" class="emoji" src="etc"/> <img alt="" class="emoji" src="etc"/><span>!</span></p>
'''
result = []
for p in soup.find_all('p', {'class': 'text'}):
emoji = p.select('img.emoji')
if emoji:
for em in emoji:
index = p.contents.index(em)
p.contents[index].replace_with(em['alt'])
result.append(p.getText())
print(result)
结果:
['I love the night!', 'I love the day!', 'I love the music !']