之所以會碰到這個需求是因爲在做暗網一個站點採集時候其站點驗證碼均採用svg矢量圖格式,一般的打碼平臺是不能夠識別svg格式圖片的所以我們需要將如下圖所示的一堆轉換成svg圖片在通過cairosvg轉換成png格式的圖片
svg驗證碼圖片源碼
首先我們要了解到在html中svg標籤中內容直接保存svg結尾的文件是自動變爲svg圖片的如下操作
"""
通過xpath語法提取svg標籤全部內容,在保存爲svg結尾的文件,這時候就會將我們看到的這段svg源碼轉化爲svg格式的圖片了
"""
response = etree.HTML(resp.text)
svg = response.xpath('//p[@style="margin-bottom:20px"]/svg')[0]
svg = etree.tostring(svg, encoding='utf-8')
svg = str(svg, encoding='utf-8')
#print(svg)
with open('e43cg.svg','w',encoding='utf-8') as f1:
f1.write(svg)
f1.close()
如上圖所示就是我們轉換後的svg圖片,接下來就是通過cairosvg庫將svg轉換成png了,cairosvg官方文檔安裝個庫比較簡單pip3 install cairosvg -i https://pypi.tuna.tsinghua.edu.cn/simple 記得加個清華源,
安裝完成後windows下引用後運行可能會報如下錯誤
原因是windows下缺少gtk+這套中的一些圖像系統依賴,我們只需下載gtk+全家桶我下載的是2.20下載完成後新建一個目錄保存後解壓,然後進入到bin目錄後複製出完整的bin目錄下完整的路徑比如我的 C:\ruanjian\GTK\bin 然後右鍵我的電腦-屬性-高級系統設置-環境變量-系統變量-Path 新建輸入我們剛纔複製的路徑如圖
保存退出即可
接下來就是svg轉png瞭如下所示也可參照官方文檔給出示例文檔示例
import cairosvg
cairosvg.svg2png(file_obj=open('e43cg.svg',"rb"), write_to='e43cg.png')
如果報路徑問題記得指定你圖片所在目錄的路徑