orynnnnn
orynnnnn

Reputation: 111

How can i scrape a football results from flashscore using python

I am new to scraping. I want to scrape Premier League Season 2018-19 Results(fixtures, results, date), But i am struggling to navigate the web site. all i get is empty list / [None]. if you have a solution that you can share that will be a great help.

Here's what i tried.

import pandas as pd
import requests as uReq
from bs4 import BeautifulSoup

url = uReq.get('https://www.flashscore.com/football/england/premier-league-2018-2019/results/')

soup = BeautifulSoup(url.text, 'html.parser')

divs = soup.find_all('div', attrs={'id': 'live-table'})

Home = []
for div in divs:
    anchor = div.find(class_='event__participant event__participant--home')
    
    Home.append(anchor)
    
    print(Home)

Upvotes: 2

Views: 10488

Answers (1)

quest
quest

Reputation: 3936

You will have to install requests_html for my solution.

Here is how I will go about it:

from requests_html import AsyncHTMLSession
from collections import defaultdict
import pandas as pd 


url = 'https://www.flashscore.com/football/england/premier-league-2018-2019/results/'

asession = AsyncHTMLSession()

async def get_scores():
    r = await asession.get(url)
    await r.html.arender()
    return r

results = asession.run(get_scores)
results = results[0]

times = results.html.find("div.event__time")
home_teams = results.html.find("div.event__participant.event__participant--home") 
scores = results.html.find("div.event__scores.fontBold")
away_teams = results.html.find("div.event__participant.event__participant--away")
event_part = results.html.find("div.event__part")


dict_res = defaultdict(list)

for ind in range(len(times)):
    dict_res['times'].append(times[ind].text)
    dict_res['home_teams'].append(home_teams[ind].text)
    dict_res['scores'].append(scores[ind].text)
    dict_res['away_teams'].append(away_teams[ind].text)
    dict_res['event_part'].append(event_part[ind].text)

df_res = pd.DataFrame(dict_res)

This generates the following output:

enter image description here

Upvotes: 9

Related Questions