美丽的汤.get_text()不应该等于Python字符串

时间:2017-02-11 01:10:33

标签: python csv beautifulsoup

我正在使用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”

2 个答案:

答案 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参数解析它,那么你可能永远不会得到匹配,除非列表文件中包含空格。