Dunaevlad
@Dunaevlad

Как корректно соотнести дату с событиями?

Написал скрипт, парсит след. сайт сайт

import asyncio
from bs4 import BeautifulSoup
from pyppeteer import launch
from pprint import pprint


def parse(doc):
    """Parse html body"""
    s4 = BeautifulSoup(doc, "lxml")

    tournament = s4.find("tr", class_="dark center").text
    when = [time for time in s4.find_all("tr", class_="center nob-border")]  # events date
    body = [html for html in s4.find_all("tr", class_="deactivate")]  # body events
    
    dats = []
    for html in body:
        dats.append(
            {
                # "date": time.find("span", class_="datet").text,
                "time": html.find("td", class_="table-time").text,
                "name": html.find("td", class_="name table-participant").text,
                "score": html.find(
                    "td", class_="center bold table-odds table-score"
                ).text,
                "1": html.find("td", class_="odds-nowrp").text,
                "2": html.find("td", class_="result-ok odds-nowrp").text
                if html.find("td", class_="result-ok odds-nowrp")
                else "-",
            }
        )

    pprint(dats)


async def main():
    """Run script"""
    args = [
        "--no-sandbox",
        "--disable-setuid-sandbox",
        "--disable-infobars",
        # "--window-position=0,0",
        # "--ignore-certifcate-errors",
        # "--ignore-certifcate-errors-spki-list",
        '--user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3312.0 Safari/537.36"',
    ]
    browser = await launch(
        args=args,
        headless=True,
        autoClose=False,
    )
    page = await browser.newPage()
    await page.goto(
        "https://www.oddsportal.com/tennis/usa/chicago-challenger-men-2018/results/"
    )
    doc = await page.evaluate("document.body.innerHTML", force_expr=True)

    await browser.close()
    parse(doc)


if __name__ == "__main__":
    asyncio.run(main())


На выходе формат должен быть след типа:
[{'1': '2.41',
  '2': '1.50',
  'date': '08.10.2018',
  'name': 'Opelka R. - Istomin D.',
  'score': '0:2',
  'time': '17:45'},
 {'1': '2.40',
  '2': '1.56',
  'date': '07.10.2018',
  'name': 'Koepfer D. - Opelka R.',
  'score': '0:2',
  'time': '19:20'},]

Не получается сделать это корректно, так как в верстке, элемент ("tr", class_="center nob-border")(данные с датой), не входят в элемент ("tr", class_="deactivate")(данные матчей), т.е. это 2 разных вложения. Пробовал через zip(), почему то выходят укороченные данные.
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы