Функция decpose () всегда возвращает «связанный метод Tag.decompose из <strong></strong>».Python, BeautifulSoup - PullRequest
0 голосов
/ 21 октября 2018

В документации BeautifulSoup я нашел информацию, что для удаленного тега используется ' degpose () ', но всякий раз, когда я пытаюсь применить его в моей ситуации, я всегда получаю один и тот же результат:

<bound method Tag.decompose of <strong>1 L</strong>>

Моя цель - получить только 3,78 зл / л.Как я могу получить правильный результат, используя этот метод?

My file.py:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests


url = "https://www.auchandirect.pl/auchan-warszawa/pl/pepsi-cola-max-niskokaloryczny-napoj-gazowany-o-smaku-cola/p-98502176"
r = requests.get(url, headers={'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'}, timeout=15)
html = urlopen(url)
soup = BeautifulSoup(html, 'lxml')
type(soup)



products_links_price = soup.find(class_='packaging')


print(products_links_price.strong.decompose)

Результат:

<bound method Tag.decompose of <strong>1 L</strong>>

Когда я пытаюсь сделать это другим способом (получая слово в 'сильном теге', все работает хорошо).

print(products_links_price.strong.text)

Result_1

'1 L'

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Очевидно, что decompose() метод не вернет ничего согласно документации BeautifulSoup.Вы должны выбрать элемент p, который содержит элемент strong.После этого разложите тег strong из выбранного элемента.Теперь компоненты тега strong исчезли бы, и вы можете извлечь нужный текст.

pack = soup.find('p', class_='packaging')
pack.strong.decompose()
print(pack.text) # this will return the desired output 3,78zł / l

Надеюсь, это поможет!Ура!

0 голосов
/ 21 октября 2018

Чтобы получить в результате только '3,78zł / l', замените print(products_links_price.strong.decompose) на:

products_links_price.strong.decompose()
print(products_links_price.text.strip())

. Это выдает:

3,78zł / l

Всякий раз, когда вы пытаетесь напечатать результатвызов метода или функции, и вы получаете None. Вы должны спросить себя, указывает ли этот метод или функцию возвращаемое значение.Если нет, то он вернет None по умолчанию, как в случае с decompose(), поскольку все, что он делает, это рекурсивно уничтожает тег и удаляет его из дерева тегов :

def decompose(self):
    """Recursively destroys the contents of this tree."""
    self.extract()
    i = self
    while i is not None:
        next = i.next_element
        i.__dict__.clear()
        i.contents = []
        i = next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...