資料儲存(無資料庫版)之一:儲存為JSON
阿新 • • 發佈:2019-01-24
#coding:utf8 #使用Requests訪問http://seputu.com/,獲取並列印HTML文件內容 import requests user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent':user_agent} r = requests.get('http://seputu.com/', headers=headers) print r.text #分析網頁的HTML結構: #標題和章節都被包含在<div class="mulu">標記下,標記位於其中的<div class="mulu-title">下的<h2>中,#章節位於其中的<div class="box">下的<a>中 from bs4 import BeautifulSoup soup = BeautifulSoup(r.text,'html.parser',from_encoding='utf-8') for mulu in soup.find_all(class_="mulu"): h2 = mulu.find('h2') if h2 != None: h2_title = h2.string #獲取標題 for a in mulu.find(class_='box').find_all('a') : #獲取所有的a標記中url和章節內容 href = a.get('href') box_title = a.get('title') print href,box_title #此時已經成功獲取標題,章節;接下介紹python操作JSON檔案 #python通過JSON模組實現對JSON的編碼解碼操作; #編碼: # 把python物件轉換成JSON物件的過程,常用的兩個函式 dumps 和 dump; # dump 是把python物件轉換成JSON物件,並將JSON物件通過fp檔案流寫入檔案; # dumps 生成一個字串 #dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,# allow_nan=True, cls=None, indent=None, separators=None, # encoding='utf-8', default=None, sort_key=False, **kw) #dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, # allow_nan=True, cls=None, indent=None, separators=None, # encoding='utf-8', default=None, sort_key=False, **kw) #引數分析: #Skipkeys:預設值為False。如果dict的keys內部的資料不是python的資料型別(str, # unicode,int,long,float,bool,None),設定為False時,就會報TypeError錯誤。 # 設定為True時,則會跳過這類key; #ensure_ascii:預設值True。如果dict內含有非ASCII的字串,則會以類似"\uXXXX" # 的格式顯示資料,設定成False後,就能正常顯示; #indent:是一個非負的整形,如果是0或者為空,則顯示資料,否則會換行且按照indent的 # 數量顯示前面的空白,將JSON內容進行格式化顯示; #separators:分隔符,實際上是(item_separator,dict_separator)的一個元祖,預設的就是(',',':'),這表示 # dictionary內keys之間用","隔開,key和value之間用":"隔開; #encoding:預設是UTF-8。設定JSON資料的編碼方式; #sort_keys:將資料根據keys的值進行排序; import json str = [{"username":"七夜","age":24},(2,3),1] json_str = json.dumps(str,ensure_ascii=False) print json_str with open('qiye.text','w') as fp: #寫入檔案 json.dump(str,fp=fp,ensure_ascii=False) #解碼: #把json物件轉成python物件的過程,常用的兩個函式是 load和loads 函式,區別於dump與dumps一樣; #loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, # parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) #load(fp, encoding=None, cls=None, object_hook=None, parse_float=None, # parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) #引數分析: #encoding:指定編碼風格 #parse_float:如果指定,將把每一個JOSN字串按照float解碼呼叫。 # 預設情況下,相當於float(num_str) #parse_int:如果指定,將把每一個JOSN字串按照int解碼呼叫。 # 預設情況下,相當於int(num_str) new_str = json.loads(json_str) print new_str with open('qiye.txt','r') as fp: print json.load(fp) #以上為講解python操作JSON; #接下來接著例子把提取到的標題,章節和連結進行JSON儲存: import json from bs4 import BeautifulSoup import requests user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers={'User-Agent':user_agent} r = requests.get('http://seputu.com/',headers=headers) soup = BeautifulSoup(r.text,'html.parser',from_encoding='utf-8') content=[] for mulu in soup.find_all(class_="mulu"): h2 = mulu.find('h2') if h2 != None: h2_title = h2.string #獲取標題 list=[] for a in mulu.find(class_='box').find_all('a'): #獲取所有的a標記中url和章節內容 href = a.get('href') box_title = a.get('title') list.append({'href':href,'box_title':box_title}) with open('qiye.json','wb') as fp: json.dump(content,fp=fp,indent=4)