Skip to content

Commit 55797ab

Browse files
committed
Progress2 (will squash at the end)
1 parent e75f5a2 commit 55797ab

File tree

6 files changed

+95
-31
lines changed

6 files changed

+95
-31
lines changed

docs/supported_publishers.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2945,6 +2945,49 @@
29452945
</table>
29462946

29472947

2948+
## UA-Publishers
2949+
2950+
<table class="publishers ua">
2951+
<thead>
2952+
<tr>
2953+
<th>Class&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</th>
2954+
<th>Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</th>
2955+
<th>URL&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</th>
2956+
<th>Languages</th>
2957+
<th>Missing&#160;Attributes</th>
2958+
<th>Deprecated&#160;Attributes</th>
2959+
<th>Additional&#160;Attributes&#160;&#160;&#160;&#160;</th>
2960+
</tr>
2961+
</thead>
2962+
<tbody>
2963+
<tr>
2964+
<td>
2965+
<code>Pravda</code>
2966+
</td>
2967+
<td>
2968+
<div>Ukrainska Pravda</div>
2969+
</td>
2970+
<td>
2971+
<a href="https://www.pravda.com.ua">
2972+
<span>www.pravda.com.ua</span>
2973+
</a>
2974+
</td>
2975+
<td>
2976+
<code>en</code>
2977+
<code>rus</code>
2978+
<code>uk</code>
2979+
</td>
2980+
<td>
2981+
<code>images</code>
2982+
<code>topics</code>
2983+
</td>
2984+
<td>&#160;</td>
2985+
<td>&#160;</td>
2986+
</tr>
2987+
</tbody>
2988+
</table>
2989+
2990+
29482991
## UK-Publishers
29492992

29502993
<table class="publishers uk">
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
from fundus.scraping.url import NewsMap, RSSFeed, Sitemap
21
from fundus.publishers.base_objects import Publisher, PublisherGroup
2+
from fundus.scraping.url import NewsMap, RSSFeed, Sitemap
33

44
from .pravda import PravdaParser
55

6+
67
class UA(metaclass=PublisherGroup):
78
default_language = "uk"
89

910
Pravda = Publisher(
1011
name="Ukrainska Pravda",
1112
domain="https://www.pravda.com.ua",
1213
parser=PravdaParser,
13-
sources = [
14-
NewsMap("https://www.pravda.com.ua/sitemap/sitemap-news.xml", languages={ "uk", "en", "rus" }),
15-
]
14+
sources=[
15+
NewsMap("https://www.pravda.com.ua/sitemap/sitemap-news.xml", languages={"uk", "en", "rus"}),
16+
],
1617
)

src/fundus/publishers/ua/pravda.py

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
from lxml.cssselect import CSSSelector
55
from lxml.etree import XPath
66

7-
from fundus.parser import ParserProxy, BaseParser, attribute
8-
#from fundus.parser import ArticleBody, BaseParser, Image, ParserProxy, attribute
7+
from fundus.parser import ArticleBody, BaseParser, Image, ParserProxy, attribute
98
from fundus.parser.utility import (
109
extract_article_body_with_selector,
1110
generic_author_parsing,
@@ -14,39 +13,28 @@
1413
)
1514

1615

17-
1816
class PravdaParser(ParserProxy):
1917
class V1(BaseParser):
20-
#_summary_selector = XPath(
21-
22-
#"//p[@class='post__excerpt'] | //h2[preceding-sibling::h1[contains(@class, 'post__title')]]"
23-
#)
24-
#_paragraph_selector = CSSSelector("div.entry-content > div.entry-content__content > p, blockquote > p")
25-
#_subheadline_selector = CSSSelector("div.entry-content > div.entry-content__content > h2")
26-
27-
#@attribute
28-
#def body(self) -> Optional[ArticleBody]:
29-
#return extract_article_body_with_selector(
30-
#self.precomputed.doc,
31-
#summary_selector=self._summary_selector,
32-
#subheadline_selector=self._subheadline_selector,
33-
#paragraph_selector=self._paragraph_selector,
34-
#)
18+
_paragraph_selector = CSSSelector("div.post_news_text > p")
19+
# _summary_selector = CSSSelector("/html/head/meta[name='description']")
20+
21+
@attribute
22+
def body(self) -> Optional[ArticleBody]:
23+
return extract_article_body_with_selector(
24+
self.precomputed.doc,
25+
paragraph_selector=self._paragraph_selector,
26+
)
3527

3628
@attribute
3729
def title(self) -> Optional[str]:
38-
return self.precomputed.ld.xpath_search("NewsArticle/headline")[0]
30+
return self.precomputed.ld.xpath_search("NewsArticle/headline", scalar=True)
3931

4032
@attribute
4133
def authors(self) -> List[str]:
42-
# The first hit is the name of the news source itself
43-
print(generic_author_parsing(self.precomputed.ld.xpath_search('NewsArticle/author/name')[1:]))
44-
return generic_author_parsing(self.precomputed.ld.xpath_search('NewsArticle/author/name')[1:])
34+
# print(self.precomputed.ld.__dict__)
35+
print(generic_author_parsing(self.precomputed.ld.xpath_search("ProfilePage/mainEntity/name")))
36+
return generic_author_parsing(self.precomputed.ld.xpath_search("ProfilePage/mainEntity/name"))
4537

4638
@attribute
4739
def publishing_date(self) -> Optional[datetime]:
48-
return generic_date_parsing(self.precomputed.ld.xpath_search("NewsArticle/datePublished")[1])
49-
50-
51-
52-
40+
return generic_date_parsing(self.precomputed.ld.xpath_search("NewsArticle/datePublished", scalar=True))
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"V1": {
3+
"authors": [
4+
"Віктор Волокіта"
5+
],
6+
"body": {
7+
"summary": [],
8+
"sections": [
9+
{
10+
"headline": [],
11+
"paragraphs": [
12+
"Міністерство цифрової трансформації України та державне агентство з контролю за гральним та лотерейним бізнесом PlayCity вперше встановлять ліміти для гравців в азартні ігри.",
13+
"Про це повідомляє пресслужба Мінцифри.",
14+
"\"Розробили спільно з PlayCity документ, за яким українці самостійно визначають часові та фінансові ліміти для гри — на день, тиждень чи місяць. Використали найкращу світову практику, щоб боротися з ігровою залежністю в українців\", - йдеться в повідомленні.",
15+
"Що передбачає документ:",
16+
"Зазначається, що текст проєкту наказу опубліковано на сайті Мінцифри. Після громадського обговорення документ опрацюють та узгодять з державними органами. Далі — його приймуть.",
17+
"Нагадаємо:",
18+
"Державне агентство з контролю за гральним та лотерейним бізнесом PlayCity оголосило тендер на створення Реєстру осіб, яким обмежено участь в азартних іграх."
19+
]
20+
}
21+
]
22+
},
23+
"publishing_date": "2025-10-24 15:26:00",
24+
"title": "В Україні вперше встановлять ліміти для гравців азартних ігор"
25+
}
26+
}
28 KB
Binary file not shown.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"Pravda_2025_10_24.html.gz": {
3+
"url": "https://epravda.com.ua/tehnologiji/yak-v-ukrajini-diyatimut-limiti-dlya-gravciv-azartnih-igor-813313",
4+
"crawl_date": "2025-10-24 15:15:05.296765"
5+
}
6+
}

0 commit comments

Comments
 (0)