2016-07-29 18 views
1

Wie würde ich wählen alle Titel in dieser SeiteWie wähle ich ein bestimmtes Tag innerhalb dieses HTML?

http://bulletin.columbia.edu/columbia-college/departments-instruction/african-american-studies/#coursestext 

zum Beispiel: Ich versuche, diese ähnlich wie alle Linien zu erhalten:

AFAS C1001 Introduction to African-American Studies. 3 points. 

main_page durch alle die iteriert Schulklassen von hier, damit ich alle Titel wie oben greifen:

http://bulletin.columbia.edu/columbia-college/departments-instruction/ 

for page in main_page: 
    sub_abbrev = page.find("div", {"class": "courseblock"}) 

ich diesen Code, aber ich kann nicht genau herausfinden, wie alle die wählen (‘ starke ') Tags des ersten Kindes. Verwenden Sie neueste Python und schöne Suppe 4 zu Web-Scrape. LMK, wenn noch etwas benötigt wird. Danke

Antwort

3

Iterate über Elemente mit courseblock Klasse, dann, für jeden Kurs, erhalten Sie das Element mit courseblocktitle Klasse. Arbeitsbeispiel mit select() and select_one() methods:

import requests 
from bs4 import BeautifulSoup 


url = "http://bulletin.columbia.edu/columbia-college/departments-instruction/african-american-studies/#coursestext" 
response = requests.get(url) 
soup = BeautifulSoup(response.content, "html.parser") 

for course in soup.select(".courseblock"): 
    title = course.select_one("p.courseblocktitle").get_text(strip=True) 
    print(title) 

Drucke:

AFAS C1001 Introduction to African-American Studies.3 points. 
AFAS W3030 African-American Music.3 points. 
AFAS C3930 (Section 3) Topics in the Black Experience: Concepts of Race and Racism.4 points. 
AFAS C3936 Black Intellectuals Seminar.4 points. 
AFAS W4031 Protest Music and Popular Culture.3 points. 
AFAS W4032 Image and Identity in Contemporary Advertising.4 points. 
AFAS W4035 Criminal Justice and the Carceral State in the 20th Century United States.4 points. 
AFAS W4037 (Section 1) Third World Studies.4 points. 
AFAS W4039 Afro-Latin America.4 points. 

Eine gute Folgefrage von @double_j:

Im OPs Beispiel hat er einen Raum zwischen die Punkte. Wie würdest du das behalten? So sehen die Daten auf der Website aus, auch wenn sie nicht im Quellcode enthalten sind.

ich aber über separator Argument der get_text() method verwenden, aber das würde auch einen zusätzlichen Raum vor dem letzten Punkt hinzufügen. Stattdessen würde ich die strong Element Texte über str.join() beitreten:

for course in soup.select(".courseblock"): 
    title = " ".join(strong.get_text() for strong in course.select("p.courseblocktitle > strong")) 
    print(title) 
+0

Im OPs Beispiel hat er einen Raum zwischen den Punkten. Wie würdest du das behalten? So sehen die Daten auf der Website aus, auch wenn sie nicht im Quellcode enthalten sind. –

+0

@double_j gutes Finden! Adressiert in der Antwort. Vielen Dank! – alecxe