Sie brauchen den ::before::
Teil hier überhaupt nicht. Ausgewählte und nicht ausgewählte Elemente haben unterschiedliche Klassen - ausgewählt ist selected_question
, nicht ausgewählt advanced_question
.
Sie können es mit so etwas wie analysieren:
from bs4 import BeautifulSoup
import requests
url = "https://www.unglobalcompact.org/participation/report/cop/create-and-submit/active/395091"
response = requests.get(url)
soup = BeautifulSoup(response.content, "lxml")
questions = soup.select("ul.questionnaire > li.question_group")
for question in questions:
question_text = question.get_text(strip=True)
print(question_text)
answers = question.find_next_siblings("li")
for answer in answers:
answer_text = answer.get_text(strip=True)
is_selected = "selected_question" in answer.get("class", [])
print(answer_text, is_selected)
print("-----")
Druck würde:
die für die Antworten gedruckt
True
Which of the following Sustainable Development Goals (SDGs) do the activities described in your COP address? [Select all that apply]
SDG 1: End poverty in all its forms everywhere False
SDG 2: End hunger, achieve food security and improved nutrition and promote sustainable agriculture False
SDG 3: Ensure healthy lives and promote well-being for all at all ages True
SDG 4: Ensure inclusive and equitable quality education and promote lifelong learning opportunities for all False
...
Hinweis, die ausgewählt wurden. Ich habe auch bemerkt, dass dieser Code nicht richtig funktioniert, wenn html.parser
als Parser ausgewählt ist.