
[code]

    soup = BeautifulSoup(html, "html.parser")
    svgs = soup.findAll('svg')
    svgs[1] # <-----  .svgとしてsaveしたい　
    
[/code]


CC BY-SA 4.0
2021-08-31T04:35:12.833
81130
2021-08-31T08:04:25.670
2021-08-31T05:39:16.040
3060
26021
question
python python3 beautifulsoup svg
Python3とBeatifulSoup4を使ってhtmlからsvgを抜き取りました。svg画像としてExcelへ貼り付けるため、svgファイルとして保存する方法を教えてください。


以下は, デスクトップに `temp.svg` という名前で保存する場合  
(デスクトップフォルダーの名前を `Desktop`と仮定 (名前変えてなければ大丈夫のはず))

[code]

    from bs4 import BeautifulSoup
    from pathlib import Path
    
    soup = BeautifulSoup(text, 'html.parser')
    svgs = soup('svg')
    
    desktop = Path.home() / 'Desktop'
    if desktop.exists():
        with (desktop / 'temp.svg').open('w') as fp:
            fp.write(str(svgs[1]))
    
    
[/code]


CC BY-SA 4.0
2021-08-31T05:30:08.417
81132
2021-08-31T05:30:08.417
43025
81130
answer


@oriri さん回答を補足すると、.svg ファイルはテキストで記述されたXML形式のデータです。

[SVG: Scalable Vector Graphics](https://developer.mozilla.org/ja/docs/Web/SVG)

> SVG 画像と関連する振る舞いは XML
> のテキストファイルに定義されるので、検索したり、インデックスをつけたり、スクリプトで操作したり、圧縮したりすることができます。加えて、これはあらゆるテキストエディターやドローソフトで作成したり編集したりできることを意味します。

[Scalable Vector Graphics -
Wikipedia](https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics)

> Scalable Vector Graphics（スケーラブル・ベクター・グラフィックス、SVG、日:
> 変倍ベクタ図形[2][3]）は、XMLベースの、2次元ベクターイメージ用の画像形式の1つである。

> ファイル形式  
>  基本的に SVG は MIME 形式指定では image/svg+xml で指定された画像フォーマットである。ファイルの拡張子は .svg と
> gzip 圧縮された .svgz がある。拡張子 .svg
> はテキストファイルであるため、大きなデータではネット間の通信トラフィックにおいてのデメリットが大きいが、圧縮した .svgz
> では数分の一のファイルサイズになる。展開機能はWebブラウザ側が受け持つ。

[Example - Scalable Vector Graphics -
Wikipedia](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics#Example)

> Example  
>  図を省略

>
[code]

>     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>     <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
> "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
>     <svg width="391" height="391" viewBox="-70.5 -70.5 391 391"
> xmlns="http://www.w3.org/2000/svg"
> xmlns:xlink="http://www.w3.org/1999/xlink">
>     <rect fill="#fff" stroke="#000" x="-70" y="-70" width="390"
> height="390"/>
>     <g opacity="0.8">
>       <rect x="25" y="25" width="200" height="200" fill="lime" stroke-
> width="4" stroke="pink" />
>       <circle cx="125" cy="125" r="75" fill="orange" />
>       <polyline points="50,150 50,200 200,200 200,100" stroke="red" stroke-
> width="4" fill="none" />
>       <line x1="50" y1="50" x2="200" y2="200" stroke="blue" stroke-width="4"
> />
>     </g>
>     </svg>
>  
[/code]

W3Cのサンプルファイルフォルダ  
[Index of /SVG/tools/svgweb/samples/svg-
files](https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/)

上記サンプルファイルのいくつかを見ると、いろいろと`<?xml `で始まっていたり`<svg
`で始まっていたりしますが、最後は`</svg>`のテキストファイルになっています。

* * *

Webページ内容としてのSVGデータは、おそらく`<svg
`で始まって`</svg>`で終わっていると思われますが、それをそのまま拡張子`.svg`のファイルとして書き込めば、SVGファイルになると考えられます。

それのシンプルな方法が @oriri さんの回答になるでしょう。

出来たファイルの中身を見て、上記参照記事等に沿ったXML形式のテキストファイルであればそれで問題無いと考えられます。


CC BY-SA 4.0
2021-08-31T08:04:25.670
81135
2021-08-31T08:04:25.670
26370
81130
answer