你生日那天的宇宙有多美?Python製作小工具一鍵查詢圖片!

這兩天微博有個熱搜——你生日那天的宇宙,看上去很有趣,點進去鏈接發現是 NASA(美國航空航天局) 提供的一個網站(慶祝哈勃望遠鏡30週年),可以查詢一下你生日那天哈勃望遠鏡拍到的太空圖片。但是大概是用的人太多或者國內某些因素,網頁加載很慢。因此,小笨聰寫了個查詢軟件供大家體驗一下啦。

微信公衆號原文鏈接

需要用到的python庫有:PyQt5,requests,lxml,openpyxl,pillow,以及一些Python自帶的庫。先看一下界面 :

具體怎麼實現的呢?

1. 首先在網站上可以下載一個 excel 表格,表格大致這樣:

v2-8cf439d092eaf846ddac21c2ac31d08d_r.jpg

裏面記錄了每個日期哈勃望遠鏡拍到的宇宙對應的介紹頁鏈接,因此我們需要讀取這個表格,

'''導入中的全年數據'''
def loadFullYearData(self, filepath):
   full_year_data = {}
   excel_data = load_workbook(filepath)
   sheet = excel_data.get_sheet_by_name('365')
   for idx, row in enumerate(sheet.rows):
       if idx > 366: break
       if idx > 0: full_year_data[row[0].value.strftime('%Y-%m-%d')[5:]] = row[4].value
   return full_year_data

2.然後根據用戶輸入的日期來獲得對應的介紹頁鏈接:

url = self.full_year_data.get(key)

3. 獲得介紹頁鏈接之後,通過 requests 庫來請求它,並用 xpath 來提取我們需要的數據,即照片鏈接和照片的介紹,如下圖紅框所示:

xpath 的路徑可以直接在瀏覽器裏 copy,代碼實現如下:

res = requests.get(url, headers=headers)
html_root = etree.HTML(res.text)
html = html_root.xpath('//*[@id="main-content"]/section/section/div[1]/div/div/div[2]')[0].xpath('./p')
# 提取介紹
intro = []
for item in html:
    intro.append(item.xpath('text()')[0])
  # 提取圖片鏈接並下載
  idx = -1
  while True:
     image_url = html_root.xpath('//*[@id="main-content"]/section/section/div[1]/div/div/div[1]/div/a')[idx]
     image_url = ('https:' + image_url.xpath('@href')[0]).replace('imgsrc.hubblesite.org/hvi', 'hubblesite.org')
     if image_url.split('.')[-1] == 'jpg':
         break
     idx -= 1

4. 接着,再根據圖片鏈接進行下載就好啦(因爲網站的圖片加載實在太慢了,所以最好自己設置一下 retry ):

filename = 'tmp.%s' % image_url.split('.')[-1]
f = open(filename, 'wb')
session = requests.Session()
retry = Retry(connect=10000, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
res = session.get(image_url, headers=headers, stream=True, verify=False)
for chunk in res.iter_content(chunk_size=1024): f.write(chunk)
f.close()

5. 最後,利用 PyQt5 再寫個簡單的可視化界面,把爬蟲功能添加上去就行了。另外,大家可以使用 pyinstaller 庫將代碼打包成 exe 文件方便使用,順便也練習一下怎麼高效使用 pyinstaller 模塊。

圖片展示:

以上就是此次 Python 製作圖片查詢小軟件的過程,微信公衆號“學編程的金融客”後臺回覆“生日圖片”即可獲取源碼

微信公衆號原文鏈接

歡迎關注微信公衆號:學編程的金融客,作者:小笨聰

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章