2017-11-29 3 views

Antwort

0

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.