|
|
@@ -7,6 +7,7 @@ from de_quoi_parle_le_monde.article import (
|
|
|
TopArticle,
|
|
|
MainArticle,
|
|
|
MainPage,
|
|
|
+ to_text,
|
|
|
)
|
|
|
|
|
|
|
|
|
@@ -17,14 +18,17 @@ class FranceTvInfoFeaturedArticleSnapshot(FeaturedArticleSnapshot):
|
|
|
class FranceTvInfoMainPage(MainPage):
|
|
|
@staticmethod
|
|
|
def get_top_articles(soup):
|
|
|
- all_articles = soup.find_all("article", class_="card-article-most-read")
|
|
|
+ def to_href(article, selector):
|
|
|
+ [url] = article.select(selector)
|
|
|
+ return url["href"]
|
|
|
+
|
|
|
+ all_articles = soup.select("article.card-article-most-read")
|
|
|
+
|
|
|
return [
|
|
|
TopArticle(
|
|
|
article=FranceTvInfoFeaturedArticleSnapshot.create(
|
|
|
- title=a.find(
|
|
|
- "p", class_="card-article-most-read__title"
|
|
|
- ).text.strip(),
|
|
|
- url=a.find("a")["href"],
|
|
|
+ title=to_text(a, "p.card-article-most-read__title"),
|
|
|
+ url=to_href(a, "a"),
|
|
|
),
|
|
|
rank=idx + 1,
|
|
|
)
|
|
|
@@ -33,11 +37,17 @@ class FranceTvInfoMainPage(MainPage):
|
|
|
|
|
|
@staticmethod
|
|
|
def get_main_article(soup):
|
|
|
- main = soup.find("article", class_="card-article-majeure") or soup.find(
|
|
|
- "article", class_="card-article-actu-forte"
|
|
|
+ def select_first_of(soup, *selectors):
|
|
|
+ for s in selectors:
|
|
|
+ if found := soup.select(s):
|
|
|
+ return found
|
|
|
+ return None
|
|
|
+
|
|
|
+ [main] = select_first_of(
|
|
|
+ soup, "article.card-article-majeure", "article.card-article-actu-forte"
|
|
|
)
|
|
|
- title = main.find(class_="card-article-majeure__title") or main.find(
|
|
|
- class_="card-article-actu-forte__title"
|
|
|
+ [title] = select_first_of(
|
|
|
+ main, ".card-article-majeure__title", ".card-article-actu-forte__title"
|
|
|
)
|
|
|
|
|
|
return MainArticle(
|