from collections import defaultdict
import csv
from bs4 import BeautifulSoup
import urllib2
import pandas as pd
import re
text = open("/Users/dynajose/Desktop/PlayList.rtf").read()
songDom = BeautifulSoup(text)
data=defaultdict(list)
musicData=defaultdict(list)
f_music = songDom.find_all("div", {"class" : "_gx6 _agv"})
for music in f_music:
try:
Name_title = music.find("a","_gx7")
data['Name'].append(Name_title.text)
except:
data['Name'].append("")
try:
type_title = music.find("div","_1fs8 fsm fwn fcg")
data['Type'].append(type_title.text)
except:
data['Type'].append("")
for link_music in f_music:
variable=link_music.find('a', href=re.compile('^https:'))['href']
data['Link'].append(variable)
for verified_page in f_music:
for page in verified_page:
page_verified = page.find_all('span',{'aria-label':'Verified Page'})
#print page_verified
check= "Verified Page"
for a in page_verified :
if check in a :
musicData['Link'].append(True)
else :
musicData['Link'].append(False)
#if sum([True for a in page_verified if check in a]) > 1:
# musicData['Link'].append(True)
#else :
# musicData['Link'].append(False)
#df = pd.DataFrame(data)
dr= pd.DataFrame(musicData)
#df
dr
期望的结果 - 因此,如果页面已经过验证,我希望DataFrame列为True。是否已验证页面是否由span标记和aria-label标记定义。 (DataFrame是布尔值)
我的逻辑 - 如果该行有"已验证的页面"我会追加True。在里面。 别的假。
但在这种情况下,所有行都有"已验证页面"在它,但它去了其他部分。
Python中是否有任何功能可以帮助我更有效地执行此操作或以更好的方式实现所需的结果?
答案 0 :(得分:1)
看起来您的page_verified
变量实际上是一个列表,这就是您的检查返回false的原因。
示例:
l = ['ab']
'a' in l
False
如果返回的列表总是包含一个元素,只需执行
if check in page_verified[0]:
如果返回的列表可以是多元素,你可以尝试类似的东西(可能是一种更好的方法,但它会起作用)
if sum([True for a in page_verified if check in a]) > 1:
**编辑**
请提供此输出,以便我们获得更多信息
for music in f_music:
for verified_page in f_music:
for page in verified_page:
page_verified = page.find_all('span',{'aria-label':'Verified Page'})
print page_verified
check= "Verified Page"
print page_verified[0]
print type(page_verified[0])
print check in page_verified[0]