python - 当使用变量作为 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'
解决方案
您的基于字典的迭代实际上并未使用相同的值字符串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”的值)