fix selectors

This commit is contained in:
Robin Appelman 2024-02-23 20:20:38 +01:00
commit 7047938329
3 changed files with 15 additions and 11 deletions

2
Cargo.lock generated
View file

@ -1540,7 +1540,7 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
[[package]] [[package]]
name = "ugc-scraper" name = "ugc-scraper"
version = "0.3.1" version = "0.3.2"
dependencies = [ dependencies = [
"insta", "insta",
"main_error", "main_error",

View file

@ -1,6 +1,6 @@
[package] [package]
name = "ugc-scraper" name = "ugc-scraper"
version = "0.3.1" version = "0.3.2"
edition = "2021" edition = "2021"
rust-version = "1.67.0" rust-version = "1.67.0"
description = "Scraper for ugcleague.com" description = "Scraper for ugcleague.com"

View file

@ -26,7 +26,8 @@ const SELECTOR_PLAYER_TEAM_SINCE: &str = "small";
const SELECTOR_AVATAR: &str = const SELECTOR_AVATAR: &str =
r#"a[href*="https://www.ugcleague.com/players_page.cfm?player_id="] img.img-responsive"#; r#"a[href*="https://www.ugcleague.com/players_page.cfm?player_id="] img.img-responsive"#;
const SELECTOR_CLASS: &str = r#"img.img-rounded[src*="images/tf2/icon/"]"#; const SELECTOR_CLASS: &str =
r#"img.img-rounded[src*="images/tf2/icon/"], img.img-rounded[data-cfsrc*="images/tf2/icon/"]"#;
pub struct PlayerParser { pub struct PlayerParser {
selector_name: Selector, selector_name: Selector,
@ -103,14 +104,17 @@ impl Parser for PlayerParser {
.unwrap_or_default() .unwrap_or_default()
.to_string(); .to_string();
let avatar = document let avatar_element =
.select(&self.selector_avatar) document
.next() .select(&self.selector_avatar)
.ok_or(ParseError::ElementNotFound { .next()
selector: SELECTOR_AVATAR, .ok_or(ParseError::ElementNotFound {
role: "player avatar", selector: SELECTOR_AVATAR,
})? role: "player avatar",
})?;
let avatar = avatar_element
.attr("src") .attr("src")
.or_else(|| avatar_element.attr("data-cfsrc"))
.unwrap_or_default() .unwrap_or_default()
.to_string(); .to_string();
@ -151,7 +155,7 @@ impl Parser for PlayerParser {
let favorite_classes = document let favorite_classes = document
.select(&self.selector_class) .select(&self.selector_class)
.filter_map(|class| class.attr("src")) .filter_map(|class| class.attr("src").or_else(|| class.attr("data-cfsrc")))
.filter_map(|img| { .filter_map(|img| {
img.strip_prefix("images/tf2/icon/") img.strip_prefix("images/tf2/icon/")
.and_then(|class| class.strip_suffix(".jpg")) .and_then(|class| class.strip_suffix(".jpg"))