Извлекать только текст, кроме содержимого тега скрипта из HTML с BeautifulSoup - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть HTML, как это

<span class="age">
    Ages 15
    <span class="loc" id="loc_loads1">
     </span>
     <script>
        getCurrentLocationVal("loc_loads1",29.45218856,59.38139268,1);
     </script>
</span>

Я пытаюсь извлечь Age 15, используя BeautifulSoup

Итак, я написал код Python следующим образом

код:

from bs4 import BeautifulSoup as bs
import urllib3

URL = 'html file'

http = urllib3.PoolManager()

page = http.request('GET', URL)

soup = bs(page.data, 'html.parser')
age = soup.find("span", {"class": "age"})

print(age.text)

вывод:

Age 15 getCurrentLocationVal("loc_loads1",29.45218856,59.38139268,1);

Я хочу только Age 15, а не функцию внутри тега script.Есть ли способ получить только текст: Age 15?или каким-либо образом исключить содержимое тега script?

PS: слишком много тегов сценария и различных URL-адресов.Я не предпочитаю заменять текст из вывода.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Поздний ответ, но для дальнейшего использования вы также можете использовать dedegrade () , чтобы удалить все script элементы из html, то есть:

soup = BeautifulSoup(html, "html.parser")                  
# remove script and style elements                         
for script in soup(["script", "style"]):                   
    script.decompose()                                     
print(soup.find("span", {"class": "age"}).text.strip())    
# Ages 15
0 голосов
/ 10 декабря 2018

Использование .find(text=True)

EX:

from bs4 import BeautifulSoup

html = """<span class="age">
    Ages 15
    <span class="loc" id="loc_loads1">
     </span>
     <script>
        getCurrentLocationVal("loc_loads1",29.45218856,59.38139268,1);
     </script>
</span>"""

soup = BeautifulSoup(html, "html.parser")
print(soup.find("span", {"class": "age"}).find(text=True).strip())

Выход:

Ages 15
...