在同一类中返回单独的文本

2024-04-28 22:26:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用BS4返回下一页的信息:https://www.sportsbookreview.com/betting-odds/mlb-baseball/money-line/?date=20171029

我的问题是围绕着返回到一个可用的格式局得分框。理想情况下,我想保存一个半局的分数列表,看起来像['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']格式返回吗


Tags: fromhttpsimportdivcomwwwdriverselenium
1条回答
网友
1楼 · 发布于 2024-04-28 22:26:58

您可以在bs4 4.7.1中使用第n个子级和第一个子级。这是最后两列

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)

您可以通过regex以json的形式获取所有内容,然后解析json。探索jsonhere

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])

相关问题 更多 >