python使用django框架,讓自己網站的背景自動和必應首頁同步
必應首頁的精美壁紙,一直都以其精美的圖片質量而得到廣大網友好評。必應網站每天自動更新首頁的壁紙,如果讓你的網站背景和必應首頁的壁紙相同,會給你的網站帶來很大的美觀度提升。
但是怎麼做到同步呢?
如果你只是簡單通過普通爬蟲是很難抓取到的。
有些人就想通過必應提供的圖片下載鏈接,把壁紙保存到伺服器站點的圖片目錄供自己的網站使用,但這樣做有很多弊端:
一來是因為把圖片保存到自己的伺服器內會造成伺服器臃腫不堪,伺服器的空間是很寶貴的,每天下載圖片保存到站點不僅浪費網站帶寬,更會造成伺服器運行速度變慢。
二來是因為通過此方式下載的圖片都會保留必應的水印,就像下圖:
但是如何突破這些限制呢?
在此我給大家提供一個API:
http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1n
通過這個API可以得到無水印的必應圖片,API後面的數字可以從【1-8】任選。分別對應一次得到多少張圖片。默認一張,最多八張,因為必應首頁每天推薦的壁紙最多就是八張。
下面可以通過python解析這個API,獲取相應的值。
import jsonnimport urllib.request as urnclass Get_biying(object):nn def get_one_photo(self):n url=rhttp://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=3n headers={n User-Agent: Mozilla / 4.0(compatible;MSIE6.0;Windows NT 5.1)n }n request=ur.Request(url,headers=headers)n response=ur.urlopen(request)n html_byte=response.read()n html_string=html_byte.decode(utf-8)n #解析成字典形式,圖片保存在images的key中:n dict_json=json.loads(html_string)n #得到images的key所包含的圖片信息:n list_photo=dict_json[images]n# 得到list_photo中的第三張圖片組成的字典n dict_three=list_photo[2]n #得到圖片的殘缺urln url_photo=dict_three[url]n #將圖片的殘缺url組合成一個完整的urln url_photo=rhttp://cn.bing.com+url_photon return url_photon
只通過解析API是得不到完整的圖片下載鏈接的,需要在圖片鏈接前加上『http://cn.bing.com』,
這樣就得到完整的圖片鏈接。
然後如何在django中使用呢。首先在python新建的app的views中創建相應的方法:
def index(request):n g=Get_biying()n url_photo=g.get_one_photo()n request.session[url_photo]=url_photon return render(request,base/base.html)n
上圖中是引用新創建的class文件,然後把得到的返回值保存到django中的session中。也許有網友會問,為什麼要保存在session中呢?直接context傳給相應的html文件不就行了嗎?
起初我也是這樣做的,但是當其他模板繼承這個模板的時候,不會得到這個這個圖片鏈接。
但是把圖片存到session中的時候,即使其他模板繼承這個模板的時候,圖片的鏈接還是可以得到的。
以下是模板中調用session的值。
background-image: url({{ request.session.url_photo }});n
這樣無論多少模板繼承這個模板,圖片的鏈接都會得到。
以上是我個人總結,如有疑問,歡迎下方討論。
推薦閱讀:
※參加數學建模,使用python會不會比matlab有劣勢?
※萌新刷題(六)旋轉字元串
※GitHub 上有什麼值得學習,簡單的,易讀的 Python 項目?
※人人都愛數據科學家!Python數據科學精華實戰課程系列教程連載 ----長期更新中,敬請關注!
※KNN兩種分類器的python簡單實現及其結果可視化比較
TAG:Python |