Имя класса Beautiful Soup имеет несколько пробелов, и find_all дает [] - PullRequest
0 голосов
/ 29 января 2020

Используя красивый суп, я пытался извлечь значение (317,69), но получил пустой результат. Кодовый блок html, который я пытался извлечь:

<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)">317.69</span>

Я пытался использовать следующие 2 способа кодирования:

value = soup.find_all(attrs={'class': 'Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'})

и

value = soup.find_all('span', class_='Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)')

Но получая результат [], если я использую print(value.text)

Примечание: XPath этого //span[@class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)"] успешно указывает правильный элемент. Но для красивого супа вывод пуст, используя python.

Сначала я попробовал аппроксимацию красивого супа на сайте:

enter image description here

Но не повезло: (

Кто-нибудь может мне предложить правильный способ извлечения значения из этого? Я имею в виду, если есть несколько классов, как извлечь значение

Код, который я пробовал:

import requests
from bs4 import BeautifulSoup

url = 'https://finance.yahoo.com/quote/AAPL?p=AAPL'

response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
p = soup.find_all(attrs={'class': 'Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'})
print(p)

1 Ответ

0 голосов
/ 29 января 2020

Как насчет этого?

from simplified_scrapy.simplified_doc import SimplifiedDoc
html ='''
<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)">317.69</span>
'''
doc = SimplifiedDoc(html)
eles = doc.getElementsByClass('Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)')
print ([ele.text for ele in eles])
# Get the first
ele = doc.getElementByClass('Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)')
print (ele.text)

Результат:

['317.69']
317.69
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...