首页 > 解决方案 > 当使用变量作为 soup.find() 的输入时,返回 None,但使用相同的 str 值作为输入有效

问题描述

我正在尝试使用 Beautiful Soup 中的 find 方法获取某个标签的内部文本。当我输入一个变量作为 find 的参数时,它返回 None,但使用相同文本的 str 输入将返回我想要的结果。为什么会这样?

这是代码片段:

    soup = BeautifulSoup(raceResults, 'html.parser')

racedetdict={
    "courseGoing": '{"class": "rp-raceTimeCourseName_condition"}',
    "raceDate" :  '"class": "rp-raceTimeCourseName__date"',
    "courseName" : '{"class": re.compile("rp-raceTimeCourseName__name")}',
    "raceDistance" : '{"class": "rp-raceTimeCourseName_distance"}'
}


for key, val in racedetdict.items():
    print("")
    print(val)
    out1 =  soup.find(attrs={"class": "rp-raceTimeCourseName_condition"})
    print(out1.get_text().strip())
    out2 = soup.find(attrs=val)
    print("")
    print(out2.get_text().strip())   

输出:

{"class": "rp-raceTimeCourseName_condition"}    
Standard To Slow

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "<stdin>", line 25, in GetRaceResults
AttributeError: 'NoneType' object has no attribute 'get_text'

标签: pythonbeautifulsoup

解决方案


您的基于字典的迭代实际上并未使用相同的值字符串find()- 中的值racedetdict是字符串,而不是字典。删除值上的引号,它应该开始工作。所以改变

racedetdict={
    "courseGoing": '{"class": "rp-raceTimeCourseName_condition"}',
    "raceDate" :  '"class": "rp-raceTimeCourseName__date"',
    "courseName" : '{"class": re.compile("rp-raceTimeCourseName__name")}',
    "raceDistance" : '{"class": "rp-raceTimeCourseName_distance"}'
}

racedetdict={
    "courseGoing": {"class": "rp-raceTimeCourseName_condition"},
    "raceDate" :  {"class": "rp-raceTimeCourseName__date"},
    "courseName" : {"class": re.compile("rp-raceTimeCourseName__name")},
    "raceDistance" : {"class": "rp-raceTimeCourseName_distance"}
}

(还必须添加{ }“raceDate”的值)


推荐阅读