BeautifulSoup4 Найти метод - PullRequest
       5

BeautifulSoup4 Найти метод

0 голосов
/ 11 ноября 2018

Я пытался получить некоторые цифры из финансов Yahoo, используя python3, но все, что я получил, это "None".

from bs4 import BeautifulSoup
import requests

source = requests.get('https://finance.yahoo.com/quote/SWCH? 
p=SWCH&.tsrc=fin-srch').text

soup = BeautifulSoup(source, 'lxml')

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

print(price)

Спасибо, R.Vij

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Обратите внимание, что если вы передадите список в class_ kwarg bs4 выберет элементы, которые имеют ЛЮБОЙ из указанных classNames в документе, а не ВСЕ из них.

Также необходимо отметить, что некоторые значения классов устанавливаются динамически с использованием JavaScript браузера, чтобы они не отображались в реальном документе.

Я изменил ваше утверждение поиска на следующее:

soup.find('span', class_=lambda x:x and set(x.split()).issuperset(set("Trsdu(0.3s) Fw(b) Fz(36px) Fw(b) D(b) Mb(-4px)".split())))

Следующий код возвращает текущую цену SWCH

from bs4 import BeautifulSoup
import requests
source = requests.get('https://finance.yahoo.com/quote/SWCH?p=SWCH&.tsrc=fin-srch').text
soup = BeautifulSoup(source, 'lxml')
price = soup.find('span', class_=lambda x:x and set(x.split()).issuperset(set("Trsdu(0.3s) Fw(b) Fz(36px) Fw(b) D(b) Mb(-4px)".split())))
print(price.text) # 9.29 for now
0 голосов
/ 11 ноября 2018

'Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)' это не класс, а пять классов. Если вы хотите найти какой-либо из них, вы должны передать их в виде списка:

soup.find('span', class_='Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'.split())  
#<span class="D(ib) W($privatePromoMsgWidth) Fz(12px) Fw(500) Va(m) Wob(n)"...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...