国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲(十六)_JSON模塊與JsonPath

這篇具有很好參考價值的文章主要介紹了Python爬蟲(十六)_JSON模塊與JsonPath。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Python爬蟲(十六)_JSON模塊與JsonPath,python,爬蟲,json,正則表達(dá)式,開發(fā)語言

數(shù)據(jù)提取之JSON與JsonPATH

JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它是的人們很容易的進(jìn)行閱讀和編寫。同時也方便了機(jī)器進(jìn)行解析和生成。適用于進(jìn)行數(shù)據(jù)交互的場景,比如網(wǎng)站前臺與后臺之間的數(shù)據(jù)交互。

JSON和XML的比較可謂不相上下。

Python2.7中自帶了JSON模塊,直接import json就可以使用了。 官方博客:http://docs.python.org/library/json.html

Json在線解析網(wǎng)站:http://www.json.cn/#

JSON

json簡單說就是javascript中的對象和數(shù)組,所以這兩種結(jié)構(gòu)就是對象和數(shù)據(jù)兩種結(jié)構(gòu),通過這兩種結(jié)構(gòu)可以表示各種復(fù)雜的結(jié)構(gòu)。

  1. 對象:對象在js中表示為{}括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為{key:value,key:value,…}的鍵值對的結(jié)構(gòu),在面向?qū)ο蟮恼Z言中,key為對象的屬性,value為對應(yīng)的屬性值,所以很容易理解,取值方法為對象.key獲取屬性值,這個屬性值的類型可以是數(shù)字、字符串、數(shù)組、對象這幾種。
  2. 數(shù)組:數(shù)組在js中是中括號[]括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為[“Python”, “javascript”, “C++”,…],取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是數(shù)字、字符串、數(shù)組、對象幾種。

import json

json模塊提供了四個功能:dumpsdump、loadsload,用于字符串和python數(shù)據(jù)類型鍵進(jìn)行轉(zhuǎn)換。

1、json.loads()

把json格式字符串解碼轉(zhuǎn)換成Python對象從json到Python的類型轉(zhuǎn)化對照如下:

Python爬蟲(十六)_JSON模塊與JsonPath,python,爬蟲,json,正則表達(dá)式,開發(fā)語言

從json到python的轉(zhuǎn)化關(guān)系

#json_loads.py

import json


strList = '[1, 2, 3, 4]'

strDict = '{"city":"北京", "name":"大貓"}'

json.loads(strList)
for str in strList:
    print(str)
#[1, 2, 3, 4]

json.loads(strDict)  #json數(shù)據(jù)自動按Unicode存儲
#{u'city': u'\u5317\u4eac', u'name': u'\u5927\u732b'}
2、json.dumps()

實現(xiàn)python類型轉(zhuǎn)化為json字符串,返回一個str對象。把一個Python對象編碼轉(zhuǎn)換成Json字符串,從python原始類型向json類型轉(zhuǎn)化對照表如下:

Python爬蟲(十六)_JSON模塊與JsonPath,python,爬蟲,json,正則表達(dá)式,開發(fā)語言

python向json轉(zhuǎn)化

#json_dumps.py

#-*- coding:utf-8 -*-

import json
import chardet

listStr = [1, 2, 3, 4]
tupleStr = (1, 2, 3, 4)
dictStr  = {"city":"北京", "name":"大貓"}

print(type(json.dumps(listStr)))
# '[1, 2, 3, 4]'

print(type(json.dumps(tupleStr)))
# '[1, 2, 3, 4]'

#注意,json.dumps()序列化時默認(rèn)使用ascii編碼
#添加參數(shù) ensure_ascii = False,禁用ascii編碼,按utf-8編碼
#chardet.detect()返回字典,其中confidence是檢測精確度。

print(json.dumps(dictStr))
#'{"city":"\\u5317\\u4eac", "name":"\\u5927\\u5218"}'

print(chardet.detect(json.dumps(dictStr)))

print(json.dumps(dictStr, ensure_ascii=False))

print(chardet.detect(json.dumps(dictStr, ensure_ascii=False)))

chardet是一個非常優(yōu)秀的編碼識別模塊,可通過pip安裝

3. json.dump()

將Python內(nèi)置類型序列化為json對象后寫入文件

#json_dump.py

import json

listStr = [{"city":"北京"}, {"name":"大劉"}]

json.dump(listStr, open("listStr.json", "w"), ensure_ascii=False)

dictStr = {"city":"北京", "name":"大劉"}
json.dump(dictStr.open("dictStr.json", "w"), ensure_ascii=False)
4.json.load()

讀取文件中json形式的字符串元素轉(zhuǎn)化成python類型

#-*- coding:utf-8 -*-


import json

strList = json.load(open("listStr.json"))
print strList
# [{u'city': u'\u5317\u4eac'}, {u'name': u'\u5927\u5218'}]

strDict = json.load(open("dictStr.json"))
print strDict
# {u'city': u'\u5317\u4eac', u'name': u'\u5927\u5218'}

JsonPath

JsonPath是一種信息抽取類庫,是從JSON文檔中抽取指定信息的工具,提供多種原因?qū)崿F(xiàn)保本:JavaScript/Python/PHP和Java

JsonPath對于JSON來說,相當(dāng)于XPATH對于XML

下載地址:https://pypi.python.org/pypi/jsonpath 安裝方法:點擊Download URL鏈接下載jsonpath,解壓之后執(zhí)行python setup.py install 官方文檔:http://goessner.net/articles/JsonPath

JsonPath與XPath語法對比:

Json結(jié)構(gòu)清晰,可讀性高,復(fù)雜度低,非常容易匹配,下表中對應(yīng)了XPath的用法。

Xpath JSONPath 描述
/ $ 跟節(jié)點
. @ 現(xiàn)行節(jié)點
/ . or [] 取子節(jié)點
n/a 就是不管位置,選擇所有符合條件的條件
* * 匹配所有元素節(jié)點
[] [] 迭代器標(biāo)示(可以在里面做簡單的迭代操作,如數(shù)組下標(biāo),根據(jù)內(nèi)容選值等)
&#124 [,] 支持迭代器中做多選
[] ?() 支持過濾操作
n/a () 支持表達(dá)式計算
() n/a 分組,JsonPath不支持
實例:

我們以拉勾網(wǎng)城市JSON文件http://www.lagou.com/lbs/getAllCitySearchLabels.json為例,獲取所有城市。

#-*- coding:utf-8 -*-

import urllib2
import json
import jsonpath
import chardet


url = "http://www.lagou.com/lbs/getAllCitySearchLabels.json"
request = urllib2.Request(url)

response  = urllib2.urlopen(request)

html = response.read()

#把json格式字符串轉(zhuǎn)換成python對象
jsonobj = json.loads(html)

#從根節(jié)點開始,匹配name節(jié)點
citylist = jsonpath.jsonpath(jsonobj, '$..name')

print citylist
print(type(citylist))

fp = open('city.json', 'w')


content = json.dumps(citylist, ensure_ascii=False)
print content
fp.write(content.encode('utf-8'))

fp.close()

注意事項:

json.loads()是把Json格式字符串解碼轉(zhuǎn)換成Python對象,如果在json.loads的時候出錯,要注意被解碼的Json字符的編碼。

如果傳入的字符串的編碼不是UTF-8的話,需要制定字符編碼的參數(shù):encoding

dataDict = json.loads(jsonStrGBK);
  • dataJsonStr是JSON字符串,假設(shè)其編碼本身是非UTF-8的話而是GBK的,那么上述代碼會導(dǎo)致出錯,改為對應(yīng)的。
dataDict = json.loads(jsonStrGBK, encoding="GBK")
  • 如果dataJsonStr通過encoding指定了合適的編碼,但是其中又包含了其它編碼的字符,則需要先去將dataJsonStr轉(zhuǎn)換為Unicode,然后再指定編碼格式調(diào)用json.loads()
dataJsonStrUni = data.JsonStr.decode("GB2312")
dataDict = json.loads(dataJsontrUni, encoding="GB2312")

字符串編碼轉(zhuǎn)換

這是程序員最苦逼的地方,什么亂碼之類的幾乎都是由漢字引起的。 其實編碼問題很好搞定,只要記住一點:

任何平臺的任何編碼,都能和Unicode互相轉(zhuǎn)換。

UTF-8與GBK互相轉(zhuǎn)換,那就先把UTF-8轉(zhuǎn)換成Unicode,再從Unicode轉(zhuǎn)換成GBK,反之同理。

# 這是一個 UTF-8 編碼的字符串
utf8Str = "你好地球"

# 1.UTF-8 編碼的字符串 轉(zhuǎn)換成 Unicode 編碼
unicodeStr = utf8Str.decode("UTF-8")

# 2. 再將 Unicode 編碼格式字符串 轉(zhuǎn)換成 GBK 編碼
gbkData = unicodeStr.encode("GBK")

# 1. 再將 GBK 編碼格式字符串 轉(zhuǎn)化成 Unicode
unicodeStr = gbkData.decode("gbk")

# 2. 再將 Unicode 編碼格式字符串轉(zhuǎn)換成 UTF-8
utf8Str = unicodeStr.encode("UTF-8")

decode的作用是將其它編碼的字符串轉(zhuǎn)換成Unicode編碼 encode的作用是將Unicode編碼轉(zhuǎn)換成其他編碼的字符串 一句話:**UTF-8**是對Unicode字符集記性編碼的一種編碼格式

更多Python的學(xué)習(xí)資料可以掃描下方二維碼無償領(lǐng)?。。。?/strong>

1)Python所有方向的學(xué)習(xí)路線(新版)

總結(jié)的Python爬蟲和數(shù)據(jù)分析等各個方向應(yīng)該學(xué)習(xí)的技術(shù)棧。

Python爬蟲(十六)_JSON模塊與JsonPath,python,爬蟲,json,正則表達(dá)式,開發(fā)語言

比如說爬蟲這一塊,很多人以為學(xué)了xpath和PyQuery等幾個解析庫之后就精通的python爬蟲,其實路還有很長,比如說移動端爬蟲和JS逆向等等。

Python爬蟲(十六)_JSON模塊與JsonPath,python,爬蟲,json,正則表達(dá)式,開發(fā)語言

(2)Python學(xué)習(xí)視頻

包含了Python入門、爬蟲、數(shù)據(jù)分析和web開發(fā)的學(xué)習(xí)視頻,總共100多個,雖然達(dá)不到大佬的程度,但是精通python是沒有問題的,學(xué)完這些之后,你可以按照我上面的學(xué)習(xí)路線去網(wǎng)上找其他的知識資源進(jìn)行進(jìn)階。

Python爬蟲(十六)_JSON模塊與JsonPath,python,爬蟲,json,正則表達(dá)式,開發(fā)語言

(3)100多個練手項目

我們在看視頻學(xué)習(xí)的時候,不能光動眼動腦不動手,比較科學(xué)的學(xué)習(xí)方法是在理解之后運用它們,這時候練手項目就很適合了,只是里面的項目比較多,水平也是參差不齊,大家可以挑自己能做的項目去練練。

Python爬蟲(十六)_JSON模塊與JsonPath,python,爬蟲,json,正則表達(dá)式,開發(fā)語言

。文章來源地址http://www.zghlxwxcb.cn/news/detail-682732.html

到了這里,關(guān)于Python爬蟲(十六)_JSON模塊與JsonPath的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • python spider 爬蟲 之 解析 xpath 、jsonpath、BeautifulSoup (三)

    python spider 爬蟲 之 解析 xpath 、jsonpath、BeautifulSoup (三)

    簡稱:bs4 BeautifulSoup跟lxml 一樣,是一個html文檔的解析器,主要功能也是解析和提取數(shù)據(jù) 優(yōu)缺點 缺點:效率沒有l(wèi)xml的效率高 優(yōu)點:接口接口人性化,使用方便 延用了css選擇器 安裝BeautifulSoup 1、安裝:pip install bs4 2、導(dǎo)入:from bs4 import BeautifulSoup 3、創(chuàng)建bs4 對象 ① 服務(wù)器響

    2024年02月11日
    瀏覽(34)
  • 【Python爬蟲開發(fā)實戰(zhàn)②】使用urllib以及jsonpath爬取即將上映電影信息

    【Python爬蟲開發(fā)實戰(zhàn)②】使用urllib以及jsonpath爬取即將上映電影信息

    ?? 個人主頁 :為夢而生~ 關(guān)注我一起學(xué)習(xí)吧! ?? 專欄 :python網(wǎng)絡(luò)爬蟲從基礎(chǔ)到實戰(zhàn) 歡迎訂閱!后面的內(nèi)容會越來越有意思~ ?? 往期推薦 : ??首先,我們前面講了多篇基礎(chǔ)內(nèi)容: 【Python爬蟲開發(fā)基礎(chǔ)④】爬蟲原理 【Python爬蟲開發(fā)基礎(chǔ)⑤】HTML概述與基本標(biāo)簽詳解 【P

    2024年02月12日
    瀏覽(29)
  • Python爬蟲|基礎(chǔ)知識點詳細(xì)匯總(requests、urllib、re、bs4、xpath、PyQuery、jsonpath、多線程、協(xié)程、數(shù)據(jù)保存、selenium)

    1. 請求數(shù)據(jù) ① requests (1) 基本使用 參數(shù) 對響應(yīng)內(nèi)容的操作 (2) Requests進(jìn)階:使用Session 為什么要用 Session? Session代表服務(wù)器與瀏覽器的一次會話過程,Session對象存儲了特定用戶會話所需的信息 例如:一定時間內(nèi)記錄賬號密碼 (自動登錄) 可以加快 requests請求速度 需要客戶端登錄的

    2023年04月08日
    瀏覽(31)
  • 從零開始學(xué)python(十六)爬蟲集群部署

    從零開始學(xué)python(十六)爬蟲集群部署

    今天講述Python框架源碼專題最后一個部分,爬蟲集群部署,前面更新了十五個從零開始學(xué)python的系列文章,分別是 : 1.編程語法必修篇 2.網(wǎng)絡(luò)編程篇 3.多線程/多進(jìn)程/協(xié)程篇 4.MySQL數(shù)據(jù)庫篇 5.Redis數(shù)據(jù)庫篇 6.MongoDB數(shù)據(jù)庫篇 7.機(jī)器學(xué)習(xí)篇 8.全棧開發(fā)篇 9.Numpy/pandas/matplotlib篇 10.H

    2024年02月13日
    瀏覽(25)
  • Python基礎(chǔ)篇(十六)-- Python標(biāo)準(zhǔn)庫模塊之heapq與bisect

    1.1 介紹 ????????堆是非線性的樹形的數(shù)據(jù)結(jié)構(gòu),有2種堆,最大堆與最小堆。Python 的 heapq 模塊默認(rèn)的是最小堆。堆數(shù)據(jù)結(jié)構(gòu)最重要的特征是 heap[0] 永遠(yuǎn)是最小的元素。 最大堆:樹中父節(jié)點的值總是大于等于任意子節(jié)點的值 最小堆:樹中父節(jié)點的值總是小于等于任意子節(jié)

    2023年04月08日
    瀏覽(18)
  • Python 自動化指南(繁瑣工作自動化)第二版:十六、使用 CSV 文件和 JSON 數(shù)據(jù)

    Python 自動化指南(繁瑣工作自動化)第二版:十六、使用 CSV 文件和 JSON 數(shù)據(jù)

    原文:https://automatetheboringstuff.com/2e/chapter16/ 在第 15 章,你學(xué)習(xí)了如何從 PDF 和 Word 文檔中提取文本。這些文件是二進(jìn)制格式的,需要特殊的 Python 模塊來訪問它們的數(shù)據(jù)。另一方面,CSV 和 JSON 文件只是純文本文件。您可以在文本編輯器(如 Mu)中查看它們。但是 Python 還附帶

    2023年04月08日
    瀏覽(657)
  • python爬蟲之json數(shù)據(jù)解析

    日常爬蟲過程中我們對于爬取到的網(wǎng)頁數(shù)據(jù)需要進(jìn)行解析,因為大多數(shù)數(shù)據(jù)是不需要的,所以我們需要進(jìn)行數(shù)據(jù)解析,常用的數(shù)據(jù)解析方式有正則表達(dá)式,xpath,bs4。今天我們重點來了解一下什么是json。歡迎收藏學(xué)習(xí),喜歡點贊支持。 json(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交

    2024年02月11日
    瀏覽(13)
  • 常用python代碼大全-python使用json模塊處理JSON數(shù)據(jù)

    在Python中, json 模塊提供了一種簡單的方法來編碼和解碼JSON數(shù)據(jù)。以下是一個簡單的例子,說明如何使用 json 模塊來處理JSON數(shù)據(jù)。 首先,我們需要導(dǎo)入 json 模塊: 編碼(Encode)JSON 數(shù)據(jù) 要將Python對象編碼為JSON格式,我們可以使用 json.dumps() 函數(shù)。這個函數(shù)將Python對象轉(zhuǎn)換為

    2024年01月20日
    瀏覽(20)
  • 【python模塊】python解析json文件詳解

    【python模塊】python解析json文件詳解

    JSON(Java Script Object Notation)是一種通常用于以不會“對系統(tǒng)造成負(fù)擔(dān)”的方式傳輸數(shù)據(jù)(主要通過 API)的格式?;驹硎抢梦谋緛碛涗洈?shù)據(jù)點,并將數(shù)據(jù)點傳輸給第三方。 JSON是一種使用文本存儲數(shù)據(jù)對象的格式。換句話說,它是一種數(shù)據(jù)結(jié)構(gòu),將對象用 文本形式 表示出

    2024年02月08日
    瀏覽(20)
  • python標(biāo)準(zhǔn)庫模塊,json

    展示了如何使用json模塊進(jìn)行編碼和解碼操作的常規(guī)示例: json模塊簡介 json 模塊是Python中的一個編碼和解碼JSON格式的輕量級模塊,主要用于將Python對象編碼為JSON格式輸出或存儲,以及將JSON格式對象解碼為Python對象。 一、概覽 常量、類或方法名 注解 json.dump 方法,傳入一個

    2024年02月16日
    瀏覽(42)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包