Cómo obtener texto que no tiene etiqueta HTML | Añadir múltiples delimitadores en split

Siguiendo XPath, seleccione el elemento div con la clase ajaxcourseindentfix y divídalo de Prerrequisito y me da todo el contenido después del prerrequisito

div = soup.select("div.ajaxcourseindentfix")[0] " ".join([word for word in div.stripped_strings]).split("Prerequisite: ")[-1] 

Mi div no solo puede tener requisitos previos sino también los siguientes puntos de división:

Prerrequisitos
Requisito indispensable
Correquisitos

Ahora, cuando tengo Prerrequisito , por encima de XPath funciona bien, pero cada vez que viene algo de los tres anteriores, XPath falla y me da el texto completo.

¿Hay una manera de poner múltiples delimitadores en XPath? ¿O cómo lo resuelvo?

Páginas de muestra:

URL del requisito básico: http://catalog.fullerton.edu/ajax/preview_course.php?catoid=16&coid=96106&show

URL de requisito previo: http://catalog.fullerton.edu/ajax/preview_course.php?catoid=16&coid=96564&show

Ambos: http://catalog.fullerton.edu/ajax/preview_course.php?catoid=16&coid=98590&show

[Tema antiguo]: cómo obtener texto que no tiene etiqueta HTML

Este código es la solución a su problema, a menos que necesite XPath específicamente, también le sugiero que revise la documentación de BeautifulSoup sobre los métodos que he usado, puede encontrar que AQUÍ

.next_element y .next_sibling pueden ser muy útiles en estos casos. o .next_elements obtendremos un generador que tendremos ya sea para convertirlo o usarlo de manera que podamos manipular un generador.

 from bs4 import BeautifulSoup import requests url = 'http://catalog.fullerton.edu/ajax/preview_course.php?catoid=16&coid=96564&show' makereq = requests.get(url).text soup = BeautifulSoup(makereq, 'lxml') whole = soup.find('td', {'class': 'custompad_10'}) # we select the whole table (td), not needed in this case thedivs = whole.find_all('div') # list of all divs and elements within them title_h3 = thedivs[2] # we select only yhe second one (list) and save it in a var mytitle = title_h3.h3 # using .h3 we can traverse (go to the child 

element) mylist = list(mytitle.next_elements) # title_h3.h3 is still part of a three and we save all the neighbor elements the_text = mylist[3] # we can then select specific elements # from a generator that we've converted into a list (ie list(...)) prequisite = mylist[6] which_cpsc = mylist[8] other_text = mylist[11] print(the_text, ' is the text') print(which_cpsc, other_text, ' is the cpsc and othertext ') # this is for testing purposes

Resuelve ambos problemas, no tenemos que usar los selectores de CSS y esas manipulaciones de listas extrañas. Todo es orgánico y funciona bien.