我們驕傲非遺數(shù)據(jù)采集,來自官方的數(shù)據(jù),Python爬蟲無所不爬

      網(wǎng)友投稿 794 2022-05-30

      本次要抓取的數(shù)據(jù)為《中國非物質(zhì)文化遺產(chǎn)數(shù)字博物館》,僅技術(shù)學習。

      有一說一,非遺數(shù)據(jù)網(wǎng)站做的非常漂亮。

      我們的驕傲!非遺數(shù)據(jù)采集,來自官方的數(shù)據(jù),Python爬蟲無所不爬

      目標數(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)容。

      上一篇:X牙直播數(shù)據(jù)采集,為數(shù)據(jù)分析做儲備,Python爬蟲120例之第24例
      下一篇:WEB前端學習分享-JavaScript中對象屬性的搜索
      相關(guān)文章
      亚洲人成依人成综合网| 亚洲?V无码成人精品区日韩| 亚洲日韩精品国产3区| 亚洲午夜精品一区二区麻豆| 亚洲日本韩国在线| 国产午夜亚洲不卡| 亚洲91av视频| 亚洲成a人片在线观看久| 亚洲视频在线观看免费视频| 亚洲女久久久噜噜噜熟女| 国产亚洲人成网站在线观看不卡 | 亚洲男人的天堂久久精品| 亚洲午夜久久久影院伊人| 亚洲国产AV无码一区二区三区| 亚洲精品乱码久久久久久久久久久久 | 国产亚洲精品成人AA片新蒲金| 久久久久久a亚洲欧洲AV| 久久精品亚洲综合| 亚洲国产成人久久综合| 亚洲综合无码一区二区| 亚洲va中文字幕| 亚洲七七久久精品中文国产| 亚洲精品中文字幕无乱码麻豆 | 亚洲一区二区三区久久久久| 亚洲AV无码国产在丝袜线观看| 亚洲麻豆精品果冻传媒| 久久国产成人精品国产成人亚洲| 亚洲欧洲日产国码高潮αv| 国产成人亚洲综合在线| 亚洲国产免费综合| 亚洲乱亚洲乱妇无码麻豆| 亚洲日本在线观看| 亚洲伊人久久大香线蕉| 亚洲日本VA午夜在线电影| 国产亚洲综合久久| 久久精品国产精品亚洲| 亚洲色偷偷色噜噜狠狠99| 亚洲av无码成人影院一区| 精品久久久久久亚洲中文字幕 | 久久青草亚洲AV无码麻豆| 亚洲美女aⅴ久久久91|