json 在 Python 爬蟲的應用
本文是 xchaoinfo 在寫 Python 爬蟲,使用 json 的一個總結。
數據存儲
json 這種輕量級的數據交換格式。易於人閱讀和編寫。同時也易於機器解析和生成,同時可以存儲豐富的數據結構。
xchaoinfo 比較喜歡這樣存儲數據,每行一個 json 數據,這樣在大文件讀寫的時候比較方便,我存儲和讀取過幾個 G 的十幾個參數的微博用戶信息的數據。寫入 json 的時候分多次寫入,讀取的時候邊讀取邊解析 json,基本不會出現內存不足的問題
d1 = {"id": 1, "name": xchaoinfo}d2 = {"id": 2, "name": Python}ls = [d1, d2]# 寫入with open("data.json", w) as fw: fw.write("
".join([json.dumps(l) for l in ls]))
# 讀取with open("data.json") as fr: for f in fr: js = json.loads(f) print(js)
網路請求
在爬蟲開發過程中,構造 GET 或者 POST 請求獲取數據是比較常用的技巧。
這裡介紹三個特例# post json 數據params = { "page": "1", "user": "xchaoinfo"}html = requests.post(url, data=json.dumps(params))# 需要對中文編碼兩次from urllib.parse import quote_plusimport requestsparams = { "page": "1", "code": quote_plus("中國")}# 請求的時候 requests 自動 URL 編碼一次html = requests.get(url, params=params)# 需要對中文進行 encode 為 GBK# 一般出現在建站時間比較長的網站params = { "page": "1", "code": "中國".encode("gbk")}# 請求的時候 requests 自動 URL 編碼一次html = requests.get(url, params=params)
xchaoinfo 通過讀取 javascript 源碼才恍然大悟的,從此走上了在 Python 開發中閱讀 javascript 源碼的不歸路。
註:例子 2 和 3, 有些亂入了,其實 GET POST 的Python 的字典數據結構
數據解析
不知道是否遇到這種類型的類似 json 的數據格式
jsonp_1492356362(json_format_data)可以使用字元串的 replace 方法替換後解析,如果你覺得解析變動的的時間戳比較麻煩,可以用 re.sub 處理後解析如果你最近爬取過知乎的數據,就會發現數據被放到 一個 div 的 data=xxx 中了。下面提供一個解析知乎用戶頁的方法
soup = BeautifulSoup(html, lxml)data = soup.find("div", id="data")[data-state]js = json.loads(data)
同時這樣有一個關於微博解析的方式,和知乎的解析方式差不多
python 爬取微博用戶列表的一個問題?這是 xchaoinfo 一些簡單的總結,歡迎提出更多關於 Python 爬蟲開發中 json 的應用技巧
首發於微信公眾號 xchaoinfo
推薦閱讀:
※XML/HTML/JSON——數據抓取過程中不得不知的幾個概念
※一捅到底的架構
※Bumpover.js - 牢固而趁手的數據校驗轉換庫