Написал скрипт, парсит след. сайт
сайт
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(), почему то выходят укороченные данные.