溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python爬蟲JSON及JSONPath的代碼實(shí)例詳解

發(fā)布時(shí)間:2020-07-18 17:49:51 來源:億速云 閱讀:227 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要講解了Python爬蟲JSON及JSONPath的代碼實(shí)例詳解,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

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

JsonPath 是一種信息抽取類庫,是從JSON文檔中抽取指定信息的工具,提供多種語言實(shí)現(xiàn)版本,包括:Javascript, Python, PHP 和 Java。

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

JsonPath與XPath語法對(duì)比:

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

Python爬蟲JSON及JSONPath的代碼實(shí)例詳解

相關(guān)推薦:《Python相關(guān)教程》

利用JSONPath爬取拉勾網(wǎng)上所有的城市

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib2
# json解析庫,對(duì)應(yīng)到lxml
import json
# json的解析語法,對(duì)應(yīng)到xpath
import jsonpath
url = "http://www.lagou.com/lbs/getAllCitySearchLabels.json"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}
request = urllib2.Request(url, headers = headers)
response = urllib2.urlopen(request)
# 取出json文件里的內(nèi)容,返回的格式是字符串
html = response.read()
# 把json形式的字符串轉(zhuǎn)換成python形式的Unicode字符串
unicodestr = json.loads(html)
# Python形式的列表
city_list = jsonpath.jsonpath(unicodestr, "$..name")
#for item in city_list:
#  print item
# dumps()默認(rèn)中文為ascii編碼格式,ensure_ascii默認(rèn)為Ture
# 禁用ascii編碼格式,返回的Unicode字符串,方便使用
array = json.dumps(city_list, ensure_ascii=False)
#json.dumps(city_list)
#array = json.dumps(city_list)
with open("lagoucity.json", "w") as f:
  f.write(array.encode("utf-8"))

結(jié)果:

Python爬蟲JSON及JSONPath的代碼實(shí)例詳解

糗事百科爬取

利用XPATH的模糊查詢

獲取每個(gè)帖子里的內(nèi)容

保存到 json 文件內(nèi)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib2
import json
from lxml import etree
url = "http://www.qiushibaike.com/8hr/page/2/"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}
request = urllib2.Request(url, headers = headers)
html = urllib2.urlopen(request).read()
# 響應(yīng)返回的是字符串,解析為HTML DOM模式 text = etree.HTML(html)
text = etree.HTML(html)
# 返回所有段子的結(jié)點(diǎn)位置,contains()模糊查詢方法,第一個(gè)參數(shù)是要匹配的標(biāo)簽,第二個(gè)參數(shù)是標(biāo)簽名部分內(nèi)容
node_list = text.xpath('//div[contains(@id, "qiushi_tag")]')
items ={}
for node in node_list:
  # xpath返回的列表,這個(gè)列表就這一個(gè)參數(shù),用索引方式取出來,用戶名
  username = node.xpath('./div/a/@title')[0]
  # 取出標(biāo)簽下的內(nèi)容,段子內(nèi)容
  content = node.xpath('.//div[@class="content"]/span')[0].text
  # 取出標(biāo)簽里包含的內(nèi)容,點(diǎn)贊
  zan = node.xpath('.//i')[0].text
  # 評(píng)論
  comments = node.xpath('.//i')[1].text
  items = {
    "username" : username,
    "content" : content,
    "zan" : zan,
    "comments" : comments
  }
  with open("qiushi.json", "a") as f:
    f.write(json.dumps(items, ensure_ascii=False).encode("utf-8") + "
")

看完上述內(nèi)容,是不是對(duì)Python爬蟲JSON及JSONPath的代碼實(shí)例詳解有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI