我正在使用Beautiful Soup从html元素中获取文本。
然后我使用循环和if语句将该文本与单词列表进行比较。如果匹配,我想返回确认。
然而,代码并未确认任何匹配,即使print语句显示实际上存在匹配。
def findText():
text = ""
url = 'www.site.com'
#Get url and store
page = requests.get(url)
#Get page content
soup = BeautifulSoup(page.content,"html.parser")
els = soup.select(".className")
lists = els[1].select(".className2")
for l in lists:
try:
text=l.find("li").get_text()
except(AttributeError):
text="null"
return text
def isMatch(text):
#Open csv file
listFile = open('list.csv', 'rb')
#prep file to be read
newListFile =csv.reader(listFile)
match = ""
for r in newListFile:
if r[0]==text.lower():
match = True
else:
match = False
return match
congressCSVFile.close()
输出
中的匹配始终为False
print(r [0])在终端
中返回(我只是说)“cat”print(text)也会在终端
中返回“cat”答案 0 :(得分:2)
你的循环是问题,或至少其中一个。找到匹配的记录后,继续。如果最后一条记录匹配,则match
只会True
结束。要解决此问题,请在找到匹配项时return
:
for r in newListFile:
if r[0]==text.lower():
return True
return False
不需要match
变量。
更好的是,使用any()
函数:
return any(r[0] == text.lower() for r in newListFile)
答案 1 :(得分:0)
在您的尝试中:text = l.find("li").get_text(strip=True)
汤和html通常会增加大量的空白区域。如果你不使用strip参数解析它,那么你可能永远不会得到匹配,除非列表文件中包含空格。