# WebDetaKit: ウェブデータ抽出 & 正規化ツールキット
**WebDetaKit** は、ウェブサイトから情報を効率的に抽出し、構造化されたデータ(CSV、JSON、Pandas DataFrame)に正規化するためのPythonツールキットです。シンプルなAPIで、ウェブスクレイピングの基本的なニーズに対応します。
## 主な機能
* **HTML取得**: 指定されたURLからウェブページのHTMLコンテンツを取得します。
* **データ抽出**: CSSセレクタを使用して、HTMLから特定のテキストや属性値(例: リンクのURL、画像のソース)を抽出します。
* **データ正規化**: 抽出した複数のデータリストを結合し、Pandas DataFrameとして整形します。
* **ファイル保存**: 整形されたDataFrameをCSVまたはJSON形式でファイルに保存します。
## インストール
WebDetaKit は `pip` を使って簡単にインストールできます。
```bash
pip install webdetakit
使用方法
1. HTMLコンテンツの取得
Python
from webdetakit.core import fetch_html
url = "[https://www.example.com](https://www.example.com)"
html_content = fetch_html(url)
if html_content:
print("HTMLコンテンツを取得しました。")
else:
print("HTMLコンテンツの取得に失敗しました。")
2. データ(テキスト)の抽出
Python
from webdetakit.core import extract_text
# 例として取得したHTMLコンテンツを使用
# html_content は fetch_html で取得したもの
# もしくはテスト用のダミーHTMLでも可
dummy_html = """
<html>
<body>
<h1>メインタイトル</h1>
<p class="summary">これは要約の段落です。</p>
<div>
<span class="item-name">商品A</span>
<span class="price">1000円</span>
</div>
<div>
<span class="item-name">商品B</span>
<span class="price">2000円</span>
</div>
</body>
</html>
"""
# H1タグのテキストを抽出
titles = extract_text(dummy_html, "h1")
print(f"タイトル: {titles}")
# 'summary' クラスを持つPタグのテキストを抽出
summaries = extract_text(dummy_html, "p.summary")
print(f"要約: {summaries}")
# 'item-name' クラスを持つspanタグのテキストをすべて抽出
item_names = extract_text(dummy_html, "span.item-name")
print(f"商品名: {item_names}")
3. データ(属性値)の抽出
Python
from webdetakit.core import extract_attribute
# 例としてHTMLコンテンツを使用
dummy_html_links = """
<html>
<body>
<a href="/page1.html">ページ1</a>
<img src="/images/pic1.jpg" alt="写真1">
<a href="[https://www.google.com](https://www.google.com)">Google</a>
</body>
</html>
"""
# aタグのhref属性を抽出
links = extract_attribute(dummy_html_links, "a", "href")
print(f"リンクURL: {links}")
# imgタグのsrc属性を抽出
image_sources = extract_attribute(dummy_html_links, "img", "src")
print(f"画像ソース: {image_sources}")
4. データの正規化と保存
Python
from webdetakit.core import normalize_to_dataframe, save_dataframe_to_csv, save_dataframe_to_json
import pandas as pd
# 抽出したデータの例(リストの長さは揃っている必要があります)
data_to_normalize = {
"商品名": ["商品A", "商品B", "商品C"],
"価格": ["1000円", "2000円", "3000円"],
"URL": ["/a.html", "/b.html", "/c.html"]
}
# Pandas DataFrameに正規化
df = normalize_to_dataframe(data_to_normalize)
print("\n正規化されたDataFrame:")
print(df)
# CSVファイルとして保存
save_dataframe_to_csv(df, "products.csv")
# 結果: products.csv が作成されます
# JSONファイルとして保存
save_dataframe_to_json(df, "products.json")
# 結果: products.json が作成されます
開発者向け情報
開発環境のセットアップ
プロジェクトをクローンした後、webdetakit_project ディレクトリ内で以下のコマンドを実行し、開発に必要な依存関係をインストールします。
Bash
git clone [https://github.com/Kongou173/webdetakit_project.git](https://github.com/Kongou173/webdetakit_project.git) # もしGitHubにリポジトリがある場合
cd webdetakit_project
pip install -e .[dev]
テストの実行
開発中にテストを実行するには、プロジェクトのルートディレクトリで pytest を使用します。
Bash
cd webdetakit_project
pytest
貢献
このプロジェクトへの貢献を歓迎します!バグ報告、機能リクエスト、プルリクエストなど、お気軽にお寄せください。
ライセンス
このプロジェクトは MIT ライセンスの下で公開されています。詳細については LICENSE ファイルをご覧ください。
Raw data
{
"_id": null,
"home_page": "https://github.com/Kongou173/webdetakit",
"name": "webdetakit",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": null,
"author": "Your Name",
"author_email": "jigengtongsheng@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/92/fb/9121b8596f9b5c26496a581441e7193995d83e6ede2431a1e8e6302456ea/webdetakit-0.1.0.tar.gz",
"platform": null,
"description": "\n# WebDetaKit: \u30a6\u30a7\u30d6\u30c7\u30fc\u30bf\u62bd\u51fa & \u6b63\u898f\u5316\u30c4\u30fc\u30eb\u30ad\u30c3\u30c8\n\n**WebDetaKit** \u306f\u3001\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u304b\u3089\u60c5\u5831\u3092\u52b9\u7387\u7684\u306b\u62bd\u51fa\u3057\u3001\u69cb\u9020\u5316\u3055\u308c\u305f\u30c7\u30fc\u30bf\uff08CSV\u3001JSON\u3001Pandas DataFrame\uff09\u306b\u6b63\u898f\u5316\u3059\u308b\u305f\u3081\u306ePython\u30c4\u30fc\u30eb\u30ad\u30c3\u30c8\u3067\u3059\u3002\u30b7\u30f3\u30d7\u30eb\u306aAPI\u3067\u3001\u30a6\u30a7\u30d6\u30b9\u30af\u30ec\u30a4\u30d4\u30f3\u30b0\u306e\u57fa\u672c\u7684\u306a\u30cb\u30fc\u30ba\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\n\n## \u4e3b\u306a\u6a5f\u80fd\n\n* **HTML\u53d6\u5f97**: \u6307\u5b9a\u3055\u308c\u305fURL\u304b\u3089\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u306eHTML\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002\n* **\u30c7\u30fc\u30bf\u62bd\u51fa**: CSS\u30bb\u30ec\u30af\u30bf\u3092\u4f7f\u7528\u3057\u3066\u3001HTML\u304b\u3089\u7279\u5b9a\u306e\u30c6\u30ad\u30b9\u30c8\u3084\u5c5e\u6027\u5024\uff08\u4f8b: \u30ea\u30f3\u30af\u306eURL\u3001\u753b\u50cf\u306e\u30bd\u30fc\u30b9\uff09\u3092\u62bd\u51fa\u3057\u307e\u3059\u3002\n* **\u30c7\u30fc\u30bf\u6b63\u898f\u5316**: \u62bd\u51fa\u3057\u305f\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30ea\u30b9\u30c8\u3092\u7d50\u5408\u3057\u3001Pandas DataFrame\u3068\u3057\u3066\u6574\u5f62\u3057\u307e\u3059\u3002\n* **\u30d5\u30a1\u30a4\u30eb\u4fdd\u5b58**: \u6574\u5f62\u3055\u308c\u305fDataFrame\u3092CSV\u307e\u305f\u306fJSON\u5f62\u5f0f\u3067\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002\n\n## \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\nWebDetaKit \u306f `pip` \u3092\u4f7f\u3063\u3066\u7c21\u5358\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002\n\n```bash\npip install webdetakit\n\u4f7f\u7528\u65b9\u6cd5\n1. HTML\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u53d6\u5f97\n\nPython\nfrom webdetakit.core import fetch_html\n\nurl = \"[https://www.example.com](https://www.example.com)\"\nhtml_content = fetch_html(url)\n\nif html_content:\n print(\"HTML\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u53d6\u5f97\u3057\u307e\u3057\u305f\u3002\")\nelse:\n print(\"HTML\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\")\n2. \u30c7\u30fc\u30bf\uff08\u30c6\u30ad\u30b9\u30c8\uff09\u306e\u62bd\u51fa\n\nPython\nfrom webdetakit.core import extract_text\n\n# \u4f8b\u3068\u3057\u3066\u53d6\u5f97\u3057\u305fHTML\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u4f7f\u7528\n# html_content \u306f fetch_html \u3067\u53d6\u5f97\u3057\u305f\u3082\u306e\n# \u3082\u3057\u304f\u306f\u30c6\u30b9\u30c8\u7528\u306e\u30c0\u30df\u30fcHTML\u3067\u3082\u53ef\ndummy_html = \"\"\"\n<html>\n<body>\n <h1>\u30e1\u30a4\u30f3\u30bf\u30a4\u30c8\u30eb</h1>\n <p class=\"summary\">\u3053\u308c\u306f\u8981\u7d04\u306e\u6bb5\u843d\u3067\u3059\u3002</p>\n <div>\n <span class=\"item-name\">\u5546\u54c1A</span>\n <span class=\"price\">1000\u5186</span>\n </div>\n <div>\n <span class=\"item-name\">\u5546\u54c1B</span>\n <span class=\"price\">2000\u5186</span>\n </div>\n</body>\n</html>\n\"\"\"\n\n# H1\u30bf\u30b0\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u62bd\u51fa\ntitles = extract_text(dummy_html, \"h1\")\nprint(f\"\u30bf\u30a4\u30c8\u30eb: {titles}\")\n\n# 'summary' \u30af\u30e9\u30b9\u3092\u6301\u3064P\u30bf\u30b0\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u62bd\u51fa\nsummaries = extract_text(dummy_html, \"p.summary\")\nprint(f\"\u8981\u7d04: {summaries}\")\n\n# 'item-name' \u30af\u30e9\u30b9\u3092\u6301\u3064span\u30bf\u30b0\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u3059\u3079\u3066\u62bd\u51fa\nitem_names = extract_text(dummy_html, \"span.item-name\")\nprint(f\"\u5546\u54c1\u540d: {item_names}\")\n3. \u30c7\u30fc\u30bf\uff08\u5c5e\u6027\u5024\uff09\u306e\u62bd\u51fa\n\nPython\nfrom webdetakit.core import extract_attribute\n\n# \u4f8b\u3068\u3057\u3066HTML\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u4f7f\u7528\ndummy_html_links = \"\"\"\n<html>\n<body>\n <a href=\"/page1.html\">\u30da\u30fc\u30b81</a>\n <img src=\"/images/pic1.jpg\" alt=\"\u5199\u771f1\">\n <a href=\"[https://www.google.com](https://www.google.com)\">Google</a>\n</body>\n</html>\n\"\"\"\n\n# a\u30bf\u30b0\u306ehref\u5c5e\u6027\u3092\u62bd\u51fa\nlinks = extract_attribute(dummy_html_links, \"a\", \"href\")\nprint(f\"\u30ea\u30f3\u30afURL: {links}\")\n\n# img\u30bf\u30b0\u306esrc\u5c5e\u6027\u3092\u62bd\u51fa\nimage_sources = extract_attribute(dummy_html_links, \"img\", \"src\")\nprint(f\"\u753b\u50cf\u30bd\u30fc\u30b9: {image_sources}\")\n4. \u30c7\u30fc\u30bf\u306e\u6b63\u898f\u5316\u3068\u4fdd\u5b58\n\nPython\nfrom webdetakit.core import normalize_to_dataframe, save_dataframe_to_csv, save_dataframe_to_json\nimport pandas as pd\n\n# \u62bd\u51fa\u3057\u305f\u30c7\u30fc\u30bf\u306e\u4f8b\uff08\u30ea\u30b9\u30c8\u306e\u9577\u3055\u306f\u63c3\u3063\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff09\ndata_to_normalize = {\n \"\u5546\u54c1\u540d\": [\"\u5546\u54c1A\", \"\u5546\u54c1B\", \"\u5546\u54c1C\"],\n \"\u4fa1\u683c\": [\"1000\u5186\", \"2000\u5186\", \"3000\u5186\"],\n \"URL\": [\"/a.html\", \"/b.html\", \"/c.html\"]\n}\n\n# Pandas DataFrame\u306b\u6b63\u898f\u5316\ndf = normalize_to_dataframe(data_to_normalize)\nprint(\"\\n\u6b63\u898f\u5316\u3055\u308c\u305fDataFrame:\")\nprint(df)\n\n# CSV\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u4fdd\u5b58\nsave_dataframe_to_csv(df, \"products.csv\")\n# \u7d50\u679c: products.csv \u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\n\n# JSON\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u4fdd\u5b58\nsave_dataframe_to_json(df, \"products.json\")\n# \u7d50\u679c: products.json \u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\n\u958b\u767a\u8005\u5411\u3051\u60c5\u5831\n\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\n\n\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30af\u30ed\u30fc\u30f3\u3057\u305f\u5f8c\u3001webdetakit_project \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3001\u958b\u767a\u306b\u5fc5\u8981\u306a\u4f9d\u5b58\u95a2\u4fc2\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002\n\nBash\ngit clone [https://github.com/Kongou173/webdetakit_project.git](https://github.com/Kongou173/webdetakit_project.git) # \u3082\u3057GitHub\u306b\u30ea\u30dd\u30b8\u30c8\u30ea\u304c\u3042\u308b\u5834\u5408\ncd webdetakit_project\npip install -e .[dev]\n\u30c6\u30b9\u30c8\u306e\u5b9f\u884c\n\n\u958b\u767a\u4e2d\u306b\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067 pytest \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\n\nBash\ncd webdetakit_project\npytest\n\u8ca2\u732e\n\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u8ca2\u732e\u3092\u6b53\u8fce\u3057\u307e\u3059\uff01\u30d0\u30b0\u5831\u544a\u3001\u6a5f\u80fd\u30ea\u30af\u30a8\u30b9\u30c8\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306a\u3069\u3001\u304a\u6c17\u8efd\u306b\u304a\u5bc4\u305b\u304f\u3060\u3055\u3044\u3002\n\n\u30e9\u30a4\u30bb\u30f3\u30b9\n\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f MIT \u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u4e0b\u3067\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f LICENSE \u30d5\u30a1\u30a4\u30eb\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002\n",
"bugtrack_url": null,
"license": null,
"summary": "A powerful toolkit for web scraping and data normalization.",
"version": "0.1.0",
"project_urls": {
"Homepage": "https://github.com/Kongou173/webdetakit"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3bfe4814c791e8c0ee8b8fd1083a4aa867670250442cc2cb48fb8c4756583269",
"md5": "df752ec0cc50b0aea2922d682de4a8a3",
"sha256": "64dd0b293435d77b797fc1eb5e075afc702c2f7da38bf2c278eb172444e37c93"
},
"downloads": -1,
"filename": "webdetakit-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "df752ec0cc50b0aea2922d682de4a8a3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 4274,
"upload_time": "2025-07-18T10:10:48",
"upload_time_iso_8601": "2025-07-18T10:10:48.586176Z",
"url": "https://files.pythonhosted.org/packages/3b/fe/4814c791e8c0ee8b8fd1083a4aa867670250442cc2cb48fb8c4756583269/webdetakit-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "92fb9121b8596f9b5c26496a581441e7193995d83e6ede2431a1e8e6302456ea",
"md5": "226ac3030769044bfdf6f0d3d49738e4",
"sha256": "db80b152a756b2ef382637b143f9456649ade998b944f82b2cdb41905facbdba"
},
"downloads": -1,
"filename": "webdetakit-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "226ac3030769044bfdf6f0d3d49738e4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 5826,
"upload_time": "2025-07-18T10:10:49",
"upload_time_iso_8601": "2025-07-18T10:10:49.640899Z",
"url": "https://files.pythonhosted.org/packages/92/fb/9121b8596f9b5c26496a581441e7193995d83e6ede2431a1e8e6302456ea/webdetakit-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-18 10:10:49",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Kongou173",
"github_project": "webdetakit",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "webdetakit"
}