Возврат отдельного текста в пределах одного класса - PullRequest
0 голосов
/ 02 июня 2019

Я использую BS4 для возврата информации со следующей страницы: https://www.sportsbookreview.com/betting-odds/mlb-baseball/money-line/?date=20171029

Проблема, с которой я столкнулся, заключается в том, чтобы вернуть счет счета за счет inning в пригодный для использования формат.В идеале я хотел бы сохранить список очков к половине тайма, который бы выглядел как ['3', '0', '0', '0' ...].Пока я могу вернуть только ['30', '00' ...].

Обе оценки относятся к одному и тому же классу, который, как я считаю, вызывает проблему:

<div class="_2563p">
<div class="_1Y3rN _308Yc">
<div>3</div>
<div>0</div></div>
<div class="_1Y3rN _308Yc">
<div>0</div>
<div>0</div>
</div>

В настоящее время я могу вернуть баллы группы ['30', '00' ...], используя следующее:

import bs4, pandas as pd, re
from datetime import datetime
from selenium import webdriver  
from selenium.common.exceptions import NoSuchElementException  
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome(r'C:\Users\grant\PythonScripts\chromedriver.exe') 
url = ('https://www.sportsbookreview.com/betting-odds/mlb-baseball/?date=' + betDate) # Full MLs
driver.get(url)
fullML = driver.page_source
driver.quit()

fullMLsoup = bs4.BeautifulSoup(fullML, 'html.parser')

x = [el.text.strip() for el in fullMLsoup.find_all(re.compile(r'div'), {'class':"_1Y3rN _308Yc"})]
print(x)

Может ли кто-нибудь помочь вернуться в ['3', '0', '0',' 0 '] формат, который я ищу?

1 Ответ

0 голосов
/ 02 июня 2019

Вы можете использовать nth child и first-child с bs4 4.7.1. Это доходит до последних двух столбцов.

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.sportsbookreview.com/betting-odds/mlb-baseball/money-line/?date=20171029')
soup = bs(r.content, 'lxml')
top = [item.text for item in soup.select('._308Yc div:first-child')]
bottom = [item.text for item in soup.select('._308Yc div:nth-child(2)')]
print(top, bottom)

Вы можете получить все как json с помощью regex, а затем проанализировать json. Исследуйте JSON здесь

import requests
import re
import json
r = requests.get('https://www.sportsbookreview.com/betting-odds/mlb-baseball/money-line/?date=20171029')
p = re.compile(r'window.__INITIAL_STATE__=(.*?);\n', re.DOTALL)
data = json.loads(p.findall(r.text)[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...