altify是近些日子在github上了熱門頁的python應(yīng)用,它簡潔而具有創(chuàng)意饱亿。讓我們來學(xué)習(xí)一下蚜退。
痛點(diǎn)
我們知道闰靴,在編寫網(wǎng)頁(html)時(shí),對圖片(img)標(biāo)簽的文本描述(alt)屬性的填寫總是讓人覺得麻煩(實(shí)現(xiàn)更好的SEO)钻注,有沒有什么辦法解決這個(gè)煩惱呢蚂且?有沒有可能讓它不煩人,自動(dòng)化完成呢幅恋?
解決
Altify 以兩百行不到的python代碼實(shí)現(xiàn)了對html文件中的圖片的alt屬性的自動(dòng)生成杏死。 主要是運(yùn)用了微軟提供的深度學(xué)習(xí)圖像識別API來產(chǎn)生圖片相應(yīng)的描述性語言,然后利用該描述性語言自動(dòng)填充待處理的html文件中的圖片屬性捆交。整個(gè)步驟一個(gè)命令就可以完成淑翼,且描述效果很好。
效果
分析
- 用BeautifulSoup分析要處理的html文件
- 找到所有的圖片標(biāo)簽
- 使用uploads.im網(wǎng)站的API上傳圖片品追,得到圖片的url玄括,然后使用該url向微軟的API請求,得到圖片的描述性語言肉瓦。(對于圖片寬度小于200px的不予處理)
- 填寫html中所有圖片的alt屬性
- 將編輯后的html文件保存在原h(huán)tml文件旁邊
整個(gè)代碼主要是三個(gè)函數(shù):
-
def apply(html_file, api_key)
利用BeautifulSoup分析html文件遭京,修改html中的圖片標(biāo)簽的屬性,將修改后的html保存
apply 調(diào)用 upload 和 caption 函數(shù) -
def upload(image_address)
上傳圖片得到圖片的url和寬度 -
def caption(image_src, api_key)
請求微軟的api獲取描述性文本
主要使用庫:
- BeautifulSoup 爬蟲常用的簡便好使的html處理庫泞莉。
- requests httplib urllib 網(wǎng)絡(luò)請求常用庫哪雕。實(shí)際上只用requests就夠了。
- argparse 命令行參數(shù)解析庫鲫趁。
其原理簡單斯嚎,邏輯清晰,沒有大難點(diǎn)挨厚。
啟發(fā)
- 把合適的工具組合起來用于合適的情景中就能產(chǎn)生很好的效果堡僻。
- 利用現(xiàn)成的API和python簡便的網(wǎng)絡(luò)請求功能以及廣泛的第三方庫,可以實(shí)現(xiàn)很有用的功能幽崩。
- Python簡潔強(qiáng)大的特性在自動(dòng)化方面具有很大的優(yōu)勢苦始。
適用Py3 - 微軟API訪問修改
import json
import requests
api_url = 'http://api.projectoxford.ai/vision/v1.0/describe'
api_key = "d0a6afa1311e4baabd6666692762eaea"
image_src = "http://h.hiphotos.baidu.com/image/h%3D200/sign=9d91b09b6f63f624035d3e03b745eb32/b90e7bec54e736d140a0b7aa9f504fc2d46269e4.jpg"
# 測試圖片
headers = {
# Request headers
'Content-Type': 'application/json',
'Ocp-Apim-Subscription-Key': api_key,
}
data = {
# Request parameters
'maxCandidates': '1',
"Url": image_src,
}
data = json.dumps(data, separators=(',',':'))
r = requests.post(api_url, data = data, headers = headers)
captioned_data = r.json()['description']['captions'][0]["text"]
# 測試返回為 'a dog sitting in the grass'
# 此外用py3的話,源碼中的BeautifulSoup函數(shù)刪掉第二個(gè)參數(shù)慌申,并且去掉一些冗余的引用庫
返回?cái)?shù)據(jù)
其它
- 源碼中使用的Uploads.im 是一個(gè)簡單快速提供圖片上傳服務(wù)的網(wǎng)站陌选,功能類似國內(nèi)的七牛云。
-
獲取一個(gè)免費(fèi)的微軟機(jī)器視覺服務(wù)的 API Key蹄溉。使用微軟賬戶登錄該網(wǎng)址后就能獲取到Key了咨油。如下圖,在Computer Vision欄里柒爵。
此外可以學(xué)習(xí)的地方
res = 0
# Use this loop to see if a file with the same name exits. If ti does, add a suffix.
while os.path.exists(os.path.dirname(html_file) + "/altify" + str(res) +".html"):
res+=1
parsed_html = BeautifulSoup(html_data)
parsed_html.prettify()
# 將修改后的html美化后保存