def search(term): response = requests.get( url="{BASE_URL}/search/search.fcgi".format(BASE_URL=BASE_URL), params={"search": term} ) response.raise_for_status() player_results = [] if response.url.startswith("{BASE_URL}/search/search.fcgi".format(BASE_URL=BASE_URL)): page = SearchPage(html=html.fromstring(response.content)) parser = SearchResultsParser( search_result_name_parser=SearchResultNameParser(), search_result_location_parser=ResourceLocationParser( resource_location_regex=SEARCH_RESULT_RESOURCE_LOCATION_REGEX, ), league_abbreviation_parser=LeagueAbbreviationParser( abbreviations_to_league=LEAGUE_ABBREVIATIONS_TO_LEAGUE, ), ) parsed_results = parser.parse(nba_aba_baa_players=page.nba_aba_baa_players) player_results += parsed_results["players"] while page.nba_aba_baa_players_pagination_url is not None: response = requests.get( url="{BASE_URL}/search/{pagination_url}".format( BASE_URL=BASE_URL, pagination_url=page.nba_aba_baa_players_pagination_url ) ) response.raise_for_status() page = SearchPage(html=html.fromstring(response.content)) parsed_results = parser.parse(nba_aba_baa_players=page.nba_aba_baa_players) player_results += parsed_results["players"] elif response.url.startswith("{BASE_URL}/players".format(BASE_URL=BASE_URL)): page = PlayerPage(html=html.fromstring(response.content)) data = PlayerData( name=page.name, resource_location=response.url, league_abbreviations=set([row.league_abbreviation for row in page.totals_table.rows]) ) parser = PlayerDataParser( search_result_location_parser=ResourceLocationParser( resource_location_regex=SEARCH_RESULT_RESOURCE_LOCATION_REGEX, ), league_abbreviation_parser=LeagueAbbreviationParser(abbreviations_to_league=LEAGUE_ABBREVIATIONS_TO_LEAGUE), ) player_results += [parser.parse(player=data)] return { "players": player_results }
def setUp(self): self.parser = PlayerDataParser( search_result_location_parser=ResourceLocationParser( resource_location_regex=ParserService. SEARCH_RESULT_RESOURCE_LOCATION_REGEX, ), league_abbreviation_parser=LeagueAbbreviationParser( abbreviations_to_league=LEAGUE_ABBREVIATIONS_TO_LEAGUE), )
def setUp(self): self.parser = SearchResultsParser( search_result_name_parser=SearchResultNameParser(), search_result_location_parser=ResourceLocationParser( resource_location_regex=SEARCH_RESULT_RESOURCE_LOCATION_REGEX, ), league_abbreviation_parser=LeagueAbbreviationParser( abbreviations_to_league=LEAGUE_ABBREVIATIONS_TO_LEAGUE, ), )
class TestResourceLocationParser(TestCase): def setUp(self): self.parser = ResourceLocationParser( resource_location_regex=ParserService. SEARCH_RESULT_RESOURCE_LOCATION_REGEX) def test_parse_players_resource_type(self): self.assertEqual( self.parser.parse_resource_type( resource_location= "https://www.basketball-reference.com/players/k/koperbu01.html" ), "players") def test_parse_coaches_resource_type(self): self.assertEqual( self.parser.parse_resource_type( resource_location= "https://www.basketball-reference.com/coaches/vanbrbu01c.html" ), "coaches") def test_parse_executives_resource_type(self): self.assertEqual( self.parser.parse_resource_type( resource_location= "https://www.basketball-reference.com/executives/vanbrbu01x.html" ), "executives", ) def test_parse_players_resource_identifier(self): self.assertEqual( self.parser.parse_resource_identifier( resource_location= "https://www.basketball-reference.com/players/k/koperbu01.html" ), "koperbu01") def test_parse_coaches_resource_identifier(self): self.assertEqual( self.parser.parse_resource_identifier( resource_location= "https://www.basketball-reference.com/coaches/vanbrbu01c.html" ), "vanbrbu01c") def test_parse_executives_resource_identifier(self): self.assertEqual( self.parser.parse_resource_identifier( resource_location= "https://www.basketball-reference.com/executives/vanbrbu01x.html" ), "vanbrbu01x", )
def __init__(self): self.team_abbreviation_parser = TeamAbbreviationParser( abbreviations_to_teams=TEAM_ABBREVIATIONS_TO_TEAM) self.league_abbreviation_parser = LeagueAbbreviationParser( abbreviations_to_league=LEAGUE_ABBREVIATIONS_TO_LEAGUE) self.location_abbreviation_parser = LocationAbbreviationParser( abbreviations_to_locations=LOCATION_ABBREVIATIONS_TO_POSITION, ) self.outcome_abbreviation_parser = OutcomeAbbreviationParser( abbreviations_to_outcomes=OUTCOME_ABBREVIATIONS_TO_OUTCOME, ) self.outcome_parser = PlayerBoxScoreOutcomeParser( outcome_abbreviation_parser=self.outcome_abbreviation_parser) self.period_details_parser = PeriodDetailsParser( regulation_periods_count=4) self.period_timestamp_parser = PeriodTimestampParser( timestamp_format=ParserService.PLAY_BY_PLAY_TIMESTAMP_FORMAT) self.position_abbreviation_parser = PositionAbbreviationParser( abbreviations_to_positions=POSITION_ABBREVIATIONS_TO_POSITION, ) self.seconds_played_parser = SecondsPlayedParser() self.scores_parser = ScoresParser( scores_regex=ParserService.PLAY_BY_PLAY_SCORES_REGEX) self.search_result_name_parser = SearchResultNameParser() self.search_result_location_parser = ResourceLocationParser( resource_location_regex=ParserService. SEARCH_RESULT_RESOURCE_LOCATION_REGEX) self.team_name_parser = TeamNameParser( team_names_to_teams=TEAM_NAME_TO_TEAM) self.play_by_plays_parser = PlayByPlaysParser( period_details_parser=self.period_details_parser, period_timestamp_parser=self.period_timestamp_parser, scores_parser=self.scores_parser, ) self.player_box_scores_parser = PlayerBoxScoresParser( team_abbreviation_parser=self.team_abbreviation_parser, location_abbreviation_parser=self.location_abbreviation_parser, outcome_abbreviation_parser=self.outcome_abbreviation_parser, seconds_played_parser=self.seconds_played_parser) self.player_data_parser = PlayerDataParser( search_result_location_parser=self.search_result_location_parser, league_abbreviation_parser=self.league_abbreviation_parser, ) self.player_season_box_scores_parser = PlayerSeasonBoxScoresParser( team_abbreviation_parser=self.team_abbreviation_parser, location_abbreviation_parser=self.location_abbreviation_parser, outcome_parser=self.outcome_parser, seconds_played_parser=self.seconds_played_parser) self.player_season_totals_parser = PlayerSeasonTotalsParser( position_abbreviation_parser=self.position_abbreviation_parser, team_abbreviation_parser=self.team_abbreviation_parser, ) self.player_advanced_season_totals_parser = PlayerAdvancedSeasonTotalsParser( team_abbreviation_parser=self.team_abbreviation_parser, position_abbreviation_parser=self.position_abbreviation_parser, ) self.scheduled_start_time_parser = ScheduledStartTimeParser() self.scheduled_games_parser = ScheduledGamesParser( start_time_parser=self.scheduled_start_time_parser, team_name_parser=self.team_name_parser, ) self.search_results_parser = SearchResultsParser( search_result_name_parser=self.search_result_name_parser, search_result_location_parser=self.search_result_location_parser, league_abbreviation_parser=self.league_abbreviation_parser, ) self.team_totals_parser = TeamTotalsParser( team_abbreviation_parser=self.team_abbreviation_parser) self.division_name_parser = DivisionNameParser(divisions=Division) self.team_standings_parser = TeamStandingsParser(teams=Team) self.conference_division_standings_parser = ConferenceDivisionStandingsParser( division_name_parser=self.division_name_parser, team_standings_parser=self.team_standings_parser, divisions_to_conferences=DIVISIONS_TO_CONFERENCES, )
def setUp(self): self.parser = ResourceLocationParser( resource_location_regex=SEARCH_RESULT_RESOURCE_LOCATION_REGEX)