improve not found team detection

This commit is contained in:
Robin Appelman 2025-04-21 16:39:01 +02:00
commit cf8de44bbb
7 changed files with 42 additions and 29 deletions

View file

@ -6,7 +6,7 @@ use scraper::{Html, Selector};
const SELECTOR_MATCH_FORMAT: &str = "h3.page-header > strong.styleColor";
const SELECTOR_MATCH_COMMENT_AUTHOR: &str = ".row-fluid .col-md-12 span.text-success";
const SELECTOR_MATCH_COMMENT: &str = ".row-fluid .col-md-12 > .white-row-light-small > p";
const SELECTOR_MATCH_COMMENT: &str = ".row-fluid .col-md-12 > .text-center > p";
const SELECTOR_MATCH_TEAM_LINK: &str = "a[href^=\"team_page\"]:not(.btn-large)";
const SELECTOR_MATCH_RESULT_TEAM: &str =
".table.table-condensed.table-bordered tr:nth-child(2) td:nth-child(1)";
@ -119,10 +119,7 @@ impl Parser for MatchPageParser {
role: "home team link",
})?
.first_text()
.ok_or(ParseError::EmptyText {
role: "home team name",
selector: SELECTOR_MATCH_RESULT_TEAM,
})?
.unwrap_or_default()
.to_string();
let team_name_away = team_names
.next()
@ -131,10 +128,7 @@ impl Parser for MatchPageParser {
role: "away team link",
})?
.first_text()
.ok_or(ParseError::EmptyText {
role: "away team name",
selector: SELECTOR_MATCH_RESULT_TEAM,
})?
.unwrap_or_default()
.to_string();
let mut team_scores = document.select(&self.selector_result_score);

View file

@ -132,13 +132,14 @@ impl Parser for TeamParser {
.unwrap_or_default()
.to_string();
match (tag.as_str(), name.as_str()) {
("", "") => return Err(ScrapeError::NotFound),
(_, "") => name = tag.clone(),
let image = document.select(&self.selector_image).next();
match (tag.as_str(), name.as_str(), image.is_some()) {
("", "", false) => return Err(ScrapeError::NotFound),
(_, "", true) => name = tag.clone(),
_ => {}
};
let image = document.select(&self.selector_image).next();
let image = image.and_then(|image| {
image
.attr("data-cfsrc")

View file

@ -267,12 +267,8 @@ impl Parser for TeamMatchesParser {
role: "match team link",
})?;
let team_name = select_text(document.root_element(), &self.selector_team_name).ok_or(
ParseError::ElementNotFound {
selector: SELECTOR_TEAM_NAME,
role: "match team name",
},
)?;
let team_name =
select_text(document.root_element(), &self.selector_team_name).unwrap_or_default();
let team = TeamRef {
id: team_id,
name: team_name.into(),