我正在使用beautifulsoup
抓取网站,并获得类p
的所有text
元素。有时在此p
中,存在一个我要保存的类为emoji
的元素。所以我最初做了这个循环:
for p in soup.find_all('p', {'class': 'text'}):
emoji = p.select('emoji')
ems = ""
if emoji:
for em in emoji:
ems += (str(em['alt']))
result.append([p.getText(), ems])
我将其转换为单行循环:
result = [[x.getText(), y['alt']] for x in soup.find_all("p", {"class": "text"}) for y in x.select('emoji')]
单行循环的问题是:
它将p
保存在存在的类emoji
中,仅 。我需要保存所有p
,并且当emoji
不存在时,我想保存一个空字符串,例如 ['lorem ipsun',''] 。我应该在单行循环中的何处添加此条件?
如果存在多个emoji
,则每次保存相同的text
n 次, n 是每次表情符号的数量使用不同的单表情符号。我该如何保存用逗号分隔的所有表情符号?尝试做''.join(','+y['alt'])
而不是y['alt']
,但没有改变我的结果。
谢谢。
答案 0 :(得分:0)
尝试一下:
import functools
result = [ [p.getText(), functools.reduce(lambda x, y: x + y, [ str(em['alt']) for em in p.select('emoji')])] for p in soup.find_all('p', {'class': 'text'})]
答案 1 :(得分:0)
使用@AniketNavlur的答案并对其进行了一些修改,最终成功了:
result = [[p.getText(), functools.reduce(lambda x, y: x + y, [str(em['alt']) for em in p.select('emoji')], '') ] for p in soup.find_all('p', {'class': 'text'})]
答案 2 :(得分:0)
单行写for循环的方式,多用于Data Science Project,你可以用这种方式,因为我们有6个标记的假新闻LIAR:
Labels: ['barely-true' 'false' 'half-true' 'mostly-true' 'pants-fire' 'true']
将其表示为二进制标签:
我们使用以下方式:
labels = [ 1 if lab=='false' or lab=='pants-fire' or lab=='barely_true' else 0 for lab in df.is_fake]
希望能帮助到很多想用同样方法解决问题的人。