做了一件有趣的事
Part1起因
大家遇到過查地理數據不知道去哪里找的情況吧?百度,好像總是找不到結果。如果有一個匯總地學類的數據網站就好了。
我在上周末,偶然間獲得了兩個地理類數據的網站匯總表格,一個是中文數據網站導航excel匯總,由成都地質調查中心的劉洪老師整理;另一個是英文數據網站excel匯總,由Karen Payne博士整理。
| 中文地理類數據導航網站 共計9類別,800個網站 | 英文地理類數據導航網站 共計17類別,1300個網址 |
這兩個文件匯總了地信和遙感專業會用到的數據網站,共計2000余個。但是這兩個有以下缺點:
網址有效性:試著打開了幾個網址,很大一部分無法訪問。
搜索麻煩:按照類型分為了多個工作簿。
直觀性:很差。
針對以上缺點,我計劃做一個網站導航:排除掉無法訪問的網站、便于搜索、網站可視化。
Part2制作流程
思路:利用爬蟲爬取2000個網頁,訪問成功的截圖,并制作該網頁對應的屬性說明信息。
1selenium截圖
我們首先保證excel都按照規范排列好,然后使用pandas讀取這些網址。有了網址,我們開始截圖。
截圖需要用到Selenium,這是一個用于Web應用程序測試的工具,能直接在瀏覽器中運行,模擬真實用戶。
在使用selenium時,需要保證自己已經開啟了http方式的科學上網。網頁成功打開,則截圖。并設置20秒的等待時間,超過20s未響應,則判定該網址不可用,繼續下一個。
#獲得表格中所有網址的首頁截圖
# coding=utf-8
import time
import shutil
import pandas as pd
#讀取表格數據
def excel_one_line_to_list(ID):
df = pd.read_excel("F:\遙感家園素材\網站導航/地球科學數據庫匯總.xlsx", usecols=[ID],
names=None) # 讀取項目名稱列,不要列名
df_li = df.values.tolist()
result = []
for s_li in df_li:
result.append(str(s_li).replace("[","").replace("]", ""))
return result
IDS=excel_one_line_to_list(0)
linkS=excel_one_line_to_list(1)
nameS=excel_one_line_to_list(2)
descS=excel_one_line_to_list(3)
authorS=excel_one_line_to_list(4)
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(2)
for i in range(len(IDS)):
try:
website=str(linkS[i]).replace("[","").replace("]", "")
web_image_name="F:\keshan\網站導航/"+str(IDS[i])+".png"
#最長加載時長
driver.set_page_load_timeout(20)
driver.get(eval(website))
driver.get_screenshot_as_file(web_image_name)
pic_url="- img: 圖床地址"+str(IDS[i])+".png"+"\n"
link=" link: "+str(eval(linkS[i]))+"\n"
name=" name: "+str(eval(nameS[i]))+"\n"
desc=" desc: "+str(eval(descS[i]))+"\n"
author=" author: "+str(eval(authorS[i]))+"\n"
# 讀取txt
txt_path = "F:\遙感家園素材\網站導航\結果數據.txt"
write_txt = open(txt_path, "a")
write_txt.writelines(pic_url)
write_txt.writelines(link)
write_txt.writelines(name)
write_txt.writelines(desc)
write_txt.writelines(author)
write_txt.close()
except:
# 讀取失敗的txt
txt_path2 = "F:\遙感家園素材\網站導航\失敗網址.txt"
write_txt2 = open(txt_path2, "a")
write_txt2.writelines(linkS[i]+"\n")
write_txt2.close()
driver.quit()
2截圖壓縮
由于一個導航頁包含幾十個圖片,為了提高網站的訪問速度,選擇對所有圖片進行壓縮。這里我開始使用pillow進行PNG圖片的壓縮,選中了最高壓縮效率,但效果差強人意,一張圖片從300kb壓縮成了296kb。于是我偷了一個懶,直接使用了第三方壓縮接口tinify:
import tinify
from glob import glob
import os.path
tinify.key = "7vx7bQP9q6fcYXDWxqGyflHX8b06bPjh"
source_dir_name = "F:\遙感家園素材\中文網站導航\爬取失敗的網站\圖片"
destination_dir_name = "F:\遙感家園素材\中文網站導航\爬取失敗的網站\壓縮"
files = glob(source_dir_name + '/*')
for file in files:
source = tinify.from_file(file)
file_name, ext = os.path.splitext(file)
file_name = file_name.replace(source_dir_name + '\\', '')
print(file_name)
source.to_file(destination_dir_name + "/" + file_name + ".png")
print("壓縮完了")
3網站發布
有了網站首頁圖片和對應的網站介紹信息后,我做成了一個md文檔。基于之前自己建好的網站進行網站的發布。
Part3導航效果
從2000多個網頁,一共爬取了800多個能用的,并且導入到了網站的導航貼片中,失效的信息也做了一個表格展示,方便讀者作為尋找數據的線索。具體的效果展示看下面的視頻:
Part4其他
www.gisrsdata.com這個網站從去年11月開始建站,直到最近還是比較弱雞。
但最近我在網站上添加了目前所有地理、投影、垂直等坐標系,也添加了上千個導航網址,能初步實現該網站的建站意義了。
該網站的源代碼和文檔都已經在github開放。
參考:
劉洪.成都地質調查中心.地球科學數據庫匯總表格
Karen Payne.GIS Data Repositories
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















