數(shù)據(jù)怎么自動求平均值(word中的表格如何求平均值)">word2013的表格數(shù)據(jù)怎么自動求平均值(word中的表格如何求平均值)
794
2022-05-30
本次要抓取的數(shù)據(jù)為《中國非物質(zhì)文化遺產(chǎn)數(shù)字博物館》,僅技術(shù)學習。
有一說一,非遺數(shù)據(jù)網(wǎng)站做的非常漂亮。
目標數(shù)據(jù)源分析
目標站點:http://www.ihchina.cn/,數(shù)據(jù)存在下圖所示位置:
原則上可以針對所有分類抓取,為降低網(wǎng)站訪問頻率,只采集單一分類,即 http://www.ihchina.cn/project#target1。
頁面數(shù)據(jù)為異步加載,通過點擊分頁獲得如下數(shù)據(jù):
http://www.ihchina.cn/Article/Index/getProject.html?province=&rx_time=&type=&cate=&keywords=&category_id=16&limit=10&p=1 http://www.ihchina.cn/Article/Index/getProject.html?province=&rx_time=&type=&cate=&keywords=&category_id=16&limit=10&p=2
其中參數(shù)分別為:
province:所屬地區(qū);
rx_time:公布時間;
type:類別;
cate:類型;
keywords:關(guān)鍵詞;
category_id:分類 ID;
limit:每頁數(shù)據(jù)量;
p:頁碼。
本案例整體代碼應該與上一案例相似,重點要看的是本次的數(shù)據(jù)返回。下圖為服務器響應數(shù)據(jù),其中核心數(shù)據(jù)存在于 list 當中,但開發(fā)人員將分頁格式進行了返回,分頁 HTML 標簽進行了返回,以上數(shù)據(jù)在部分項目中存在參考價值。
編碼時間
本次為 threading 模塊的最后一個案例,在初級爬蟲階段,掌握基本的多線程應用即可。
在實測過程中,有一個經(jīng)典的采集技巧可以使用,即測試服務器單次接口最大返回數(shù)據(jù)量,在本案例中,你可以手動修改上述請求地址的 limit 參數(shù),例如將其修改為 100,該值會返回 100 條數(shù)據(jù)。
出現(xiàn)上述情況,就說服務器對單次返回數(shù)據(jù)沒有限制,所以原則上你是可以直接修改為 3610(目標分類所有數(shù)據(jù))的。
這樣就可以實現(xiàn)一次訪問接口,獲取全部數(shù)據(jù)(不過當返回的數(shù)據(jù)量大時,接口相應速度會變慢,建議根據(jù)實際情況調(diào)整) 。
完整代碼如下所示
import threading import requests import random class Common: def __init__(self): pass def get_headers(self): uas = [ "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)", "你自己的UA值,或者可以從之前的博客中獲取" ] ua = random.choice(uas) headers = { "user-agent": ua, "referer": "https://www.baidu.com" } return headers def run(index, url, semaphore, headers): semaphore.acquire() # 加鎖 res = requests.get(url, headers=headers, timeout=5) res.encoding = 'utf-8' text = res.text save(index,text) semaphore.release() # 釋放 # 存儲的數(shù)據(jù)中文進行了 UNICODE 編碼,分析的時候注意轉(zhuǎn)化 def save(index, text): with open(f"./非遺數(shù)據(jù)/{index}.json", "w", encoding="utf-8") as f: f.write(f"{text}") print("該URL地址數(shù)據(jù)寫入完畢") if __name__ == '__main__': c = Common() url_format = 'http://www.ihchina.cn/Article/Index/getProject.html?province=&rx_time=&type=&cate=&keywords=&category_id=16&limit=10&p={}' # 拼接URL,全局共享變量,362 頁直接設置,沒有動態(tài)獲取 urls = [url_format.format(i) for i in range(1, 362)] # 最多允許5個線程同時運行 semaphore = threading.BoundedSemaphore(5) for i, url in enumerate(urls): t = threading.Thread(target=run, args=(i, url, semaphore, c.get_headers())) t.start() while threading.active_count() != 1: pass else: print('所有線程運行完畢')
Python 任務調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。