Разделение и нарезка очищенных списков python

#python #web-scraping #split #slice

Вопрос:

Я пытаюсь создать представление о командах и их шансах.

Я хочу сделать это в фрейме данных. Я просчитал их шансы.

Я хочу, чтобы команда и коэффициенты были в отдельных колонках.

Я хочу отдельные игры на отдельных рядах.

Мне удалось вернуть список в форме ниже:

 ['Buffalo Bills 1.30 Washington Football Team 3.50',
 'Kansas City Chiefs 1.35 Los Angeles Chargers 3.25',]
 

Мне нужно вернуть список или разрезать его, чтобы он выглядел следующим образом:

 [['San Francisco 49ers, 1.62, Green Bay Packers, 2.30'],
['Dallas Cowboys, 1.57, Philadelphia Eagles, 2.40],]
 

Код, используемый на сегодняшний день, приведен ниже:

 chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
wd = webdriver.Chrome('chromedriver',options=chrome_options)
url = str("https://www.ladbrokes.com.au/sports/american-football/nfl")
wd.get(url)
time.sleep(5)
html = wd.page_source
html 
SCROLL_PAUSE_TIME = 1

# Get scroll height
last_height = wd.execute_script("return document.body.scrollHeight")

while True:
    #Scroll down to bottom
    wd.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)
    games = wd.find_elements_by_class_name("sports-market-primary__prices-inner")

    # Calculate new scroll height and compare with last scroll height
    new_height = wd.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

result=[]
for  i in games:
  var = i.text
  var = str(var).replace('n',' ')#.split()
  result.append(var)

'''
 

Ответ №1:

Ну, вы можете использовать re модуль. Вот пример кода:

 import re


result = [
    "Buffalo Bills 1.30 Washington Football Team 3.50",
    "Kansas City Chiefs 1.35 Los Angeles Chargers 3.25",
]
pattern = "([A-Za-z ] ) (d .?d*) ([A-Za-z ] ) (d .?d*)"
pre_compiled = re.compile(pattern)
for i in result:
    l = list(*re.findall(pattern, i))
    ans = ", ".join(l)
    print(l)
    print(ans)
    print()
 

Выход:

 ['Buffalo Bills', '1.30', 'Washington Football Team', '3.50']
Buffalo Bills, 1.30, Washington Football Team, 3.50

['Kansas City Chiefs', '1.35', 'Los Angeles Chargers', '3.25']
Kansas City Chiefs, 1.35, Los Angeles Chargers, 3.25