Как получить текст без HTML-тега | Добавить несколько разделителей в сплит

Следуя XPath, выберите элемент div с классом ajaxcourseindentfix, отделите его от Prerequisite и выдайте мне все содержимое после Prerequisite.

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

У моего div может быть не только предпосылка, но и следующие точки разделения:

Предпосылки
Corerequisite
Corerequisites

Теперь, когда у меня есть Prerequisite, выше XPath работает нормально, но всякий раз, когда приходит что-то из трех выше, XPath дает сбой и выдает мне весь текст.

Есть ли способ поместить несколько разделителей в XPath? Или как мне это решить?

Образцы страниц:

Соответствующий URL: http://catalog.fullerton.edu/ajax/preview_course.php?catoid=16&coid=96106&show

Предварительный URL-адрес: http://catalog.fullerton.edu/ajax/preview_course.php?catoid=16&coid=96564&show

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

[Старая тема] - Как получить текст без тега HTML

1 ответ

Решение

Этот код является решением вашей проблемы, если вам не нужен XPath, и я бы посоветовал вам ознакомиться с документацией BeautifulSoup о методах, которые я использовал, вы можете найти ЗДЕСЬ

.next_element а также .next_sibling может быть очень полезным в этих случаях. или же .next_elements мы получим генератор, который нам придется либо преобразовать, либо использовать его таким образом, чтобы мы могли манипулировать генератором.

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 <h3> 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 (i.e. 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

Решает обе проблемы, нам не нужно использовать селекторы CSS и эти странные манипуляции со списком. Все органично и хорошо работает.

Другие вопросы по тегам