tktm8's picture
Upload 59 files
fb05e78 verified
from pathlib import Path
from src.scraping.convert import to_markdown
from src.scraping.exceptions import ArticleNotFoundError, FetchError
from src.scraping.extract import extract_main_html
from src.scraping.fetch import fetch_html
from src.scraping.io import save_markdown
from src.scraping.textutil import compact_blank_lines
async def run(url: str, out_dir: Path) -> Path:
"""
URLを取得→本文抽出→Markdown化→空行圧縮→保存 までを実行。
戻り値は保存先パス。
Raises:
ArticleNotFoundError: 記事が存在しない場合
FetchError: ネットワークエラーの場合
"""
# HTMLを取得(例外が発生する可能性あり)
html = await fetch_html(url, timeout_s=25.0)
# 本文抽出→Markdown化→空行圧縮→保存
main_html = extract_main_html(html)
md_out = to_markdown(main_html)
md_out = compact_blank_lines(md_out)
return save_markdown(md_out, out_dir, url)
async def to_markdown_from_url(url: str, timeout_s: float = 25.0) -> str:
"""
URLを取得→本文抽出→Markdown化→空行圧縮 までを実行してMarkdown文字列を返す。
Args:
url: 取得対象URL
timeout_s: 取得タイムアウト(秒)
Returns:
Markdown化された本文文字列
Raises:
ArticleNotFoundError: 記事が存在しない場合
FetchError: ネットワークエラーの場合
"""
html = await fetch_html(url, timeout_s=timeout_s)
main_html = extract_main_html(html)
md_out = to_markdown(main_html)
return compact_blank_lines(md_out)