Я пытаюсь получить внутренний текст определенного тега с помощью метода find в Beautiful Soup. Когда я ввожу переменную в качестве аргумента для поиска, она возвращает 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'
0
Teezee 14 Июн 2020 в 18:41

1 ответ

Лучший ответ

Ваша итерация на основе словарей на самом деле не использует идентичные строки значений для 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")

1
barny 14 Июн 2020 в 15:48