Přidat upraveny_pubcrawler/parser.py

This commit is contained in:
Kristián Sokolský 2026-11-06 11:08:32 +00:00
parent 28e6511a93
commit f76408a90e

View File

@ -0,0 +1,55 @@
from ...common.parser import clean
def parse_qa(response):
title = clean(" ".join(response.css("h1 ::text").getall()))
if not title:
raise ValueError("Chýba nadpis otázky (h1)")
question_node = response.css("div.pw_bc")
if not question_node:
raise ValueError("Nenašiel sa text otázky (div.pw_bc)")
question = clean(" ".join(question_node[0].css("p ::text, p::text").getall()))
if not question:
question = clean(" ".join(question_node[0].css("::text").getall()))
answer_node = response.css('[id^="comment-"]')
if not answer_node:
raise ValueError("Nenašla sa odpoveď (id^=comment-)")
answer = clean(" ".join(answer_node[0].css("div.ic_l p ::text, div.ic_l p::text").getall()))
if not answer:
answer = clean(" ".join(answer_node[0].css("div.ic_l ::text").getall()))
if len(question) < 10 or len(answer) < 20:
raise ValueError(f"Príliš krátke: otázka={len(question)}, odpoveď={len(answer)}")
return {
"title": title,
"question": question,
"answer": answer,
}
def parse_forum(response):
title = clean(" ".join(response.css("h1 ::text").getall()))
posts = []
for node in response.css('[id^="comment-"]'):
text = clean(" ".join(node.css("div.ic_l p ::text, div.ic_l p::text").getall()))
if not text:
text = clean(" ".join(node.css("div.ic_l ::text").getall()))
if text and len(text) > 30:
posts.append(text)
if len(posts) < 2:
raise ValueError(f"Málo príspevkov vo vlákne: {len(posts)}")
question = posts[0]
pairs = []
for answer in posts[1:]:
pairs.append((question, answer))
return title, pairs