A. 介面返回的json報文怎麼用python解析
importjson
obj=json.loads('你返回的JSON字元串')
比JAVA簡單多了。obj是一個字典對象。
B. 如何使用 Python 得到網頁返回正確的 Json 數據
1.Request
Header
里最好加上
Content-Type:
application/x-www-form-urlencoded;
charset=UTF-8
2.
使用
Post
,個人覺得應該是
requests.post('x.api',data
=
json.mps(datas),headers
=
header)
3.
得到的
Response
也用
json.loads(response.txt)比較保險吧
C. 如何在scrapy框架下用python爬取json文件
生成Request的時候與一般的網頁是相同的,提交Request後scrapy就會下載相應的網頁生成Response,這時只用解析response.body按照解析json的方法就可以提取數據了。代碼示例如下(以京東為例,其中的parse_phone_price和parse_commnets是通過json提取的,省略部分代碼):
# -*- coding: utf-8 -*-
from scrapy.spiders import Spider, CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from jdcom.items import JdPhoneCommentItem, JdPhoneItem
from scrapy import Request
from datetime import datetime
import json
import logging
import re
logger = logging.getLogger(__name__)
class JdPhoneSpider(CrawlSpider):
name = "jdPhoneSpider"
start_urls = ["http://list.jd.com/list.html?cat=9987,653,655"]
rules = (
Rule(
LinkExtractor(allow=r"list\.html\?cat\=9987,653,655\&page\=\d+\&trans\=1\&JL\=6_0_0"),
callback="parse_phone_url",
follow=True,
),
)
def parse_phone_url(self, response):
hrefs = response.xpath("//div[@id='plist']/ul/li/div/div[@class='p-name']/a/@href").extract()
phoneIDs = []
for href in hrefs:
phoneID = href[14:-5]
phoneIDs.append(phoneID)
commentsUrl = "http://sclub.jd.com/proctpage/p-%s-s-0-t-3-p-0.html" % phoneID
yield Request(commentsUrl, callback=self.parse_commnets)
def parse_phone_price(self, response):
phoneID = response.meta['phoneID']
meta = response.meta
priceStr = response.body.decode("gbk", "ignore")
priceJson = json.loads(priceStr)
price = float(priceJson[0]["p"])
meta['price'] = price
phoneUrl = "http://item.jd.com/%s.html" % phoneID
yield Request(phoneUrl, callback=self.parse_phone_info, meta=meta)
def parse_phone_info(self, response):
pass
def parse_commnets(self, response):
commentsItem = JdPhoneCommentItem()
commentsStr = response.body.decode("gbk", "ignore")
commentsJson = json.loads(commentsStr)
comments = commentsJson['comments']
for comment in comments:
commentsItem['commentId'] = comment['id']
commentsItem['guid'] = comment['guid']
commentsItem['content'] = comment['content']
commentsItem['referenceId'] = comment['referenceId']
# 2016-09-19 13:52:49 %Y-%m-%d %H:%M:%S
datetime.strptime(comment['referenceTime'], "%Y-%m-%d %H:%M:%S")
commentsItem['referenceTime'] = datetime.strptime(comment['referenceTime'], "%Y-%m-%d %H:%M:%S")
commentsItem['referenceName'] = comment['referenceName']
commentsItem['userProvince'] = comment['userProvince']
# commentsItem['userRegisterTime'] = datetime.strptime(comment['userRegisterTime'], "%Y-%m-%d %H:%M:%S")
commentsItem['userRegisterTime'] = comment.get('userRegisterTime')
commentsItem['nickname'] = comment['nickname']
commentsItem['userLevelName'] = comment['userLevelName']
commentsItem['userClientShow'] = comment['userClientShow']
commentsItem['proctColor'] = comment['proctColor']
# commentsItem['proctSize'] = comment['proctSize']
commentsItem['proctSize'] = comment.get("proctSize")
commentsItem['afterDays'] = int(comment['days'])
images = comment.get("images")
images_urls = ""
if images:
for image in images:
images_urls = image["imgUrl"] + ";"
commentsItem['imagesUrl'] = images_urls
yield commentsItem
commentCount = commentsJson["proctCommentSummary"]["commentCount"]
goodCommentsCount = commentsJson["proctCommentSummary"]["goodCount"]
goodCommentsRate = commentsJson["proctCommentSummary"]["goodRate"]
generalCommentsCount = commentsJson["proctCommentSummary"]["generalCount"]
generalCommentsRate = commentsJson["proctCommentSummary"]["generalRate"]
poorCommentsCount = commentsJson["proctCommentSummary"]["poorCount"]
poorCommentsRate = commentsJson["proctCommentSummary"]["poorRate"]
phoneID = commentsJson["proctCommentSummary"]["proctId"]
priceUrl = "http://p.3.cn/prices/mgets?skuIds=J_%s" % phoneID
meta = {
"phoneID": phoneID,
"commentCount": commentCount,
"goodCommentsCount": goodCommentsCount,
"goodCommentsRate": goodCommentsRate,
"generalCommentsCount": generalCommentsCount,
"generalCommentsRate": generalCommentsRate,
"poorCommentsCount": poorCommentsCount,
"poorCommentsRate": poorCommentsRate,
}
yield Request(priceUrl, callback=self.parse_phone_price, meta=meta)
pageNum = commentCount / 10 + 1
for i in range(pageNum):
commentsUrl = "http://sclub.jd.com/proctpage/p-%s-s-0-t-3-p-%d.html" % (phoneID, i)
yield Request(commentsUrl, callback=self.parse_commnets)
D. 如何在scrapy框架下用python爬取json文件
如果是scrapy 看下面代碼。
def parse(self, response):
jsonresponse = json.loads(response.body_as_unicode())
item = MyItem()
item["firstName"] = jsonresponse["firstName"]
return item
E. python3 如果取json內容,謝謝
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C、C++、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網路傳輸速率)。
JSON在python中分別由list和dict組成。
這是用於序列化的兩個模塊:
json: 用於字元串和python數據類型間進行轉換
pickle: 用於python特有的類型和python的數據類型間進行轉換
Json模塊提供了四個功能:mps、mp、loads、load
pickle模塊提供了四個功能:mps、mp、loads、load
json mps把數據類型轉換成字元串 mp把數據類型轉換成字元串並存儲在文件中 loads把字元串轉換成數據類型 load把文件打開從字元串轉換成數據類型
json是可以在不同語言之間交換數據的,而pickle只在python之間使用。json只能序列化最基本的數據類型,josn只能把常用的數據類型序列化(列表、字典、列表、字元串、數字、),比如日期格式、類對象!josn就不行了。而pickle可以序列化所有的數據類型,包括類,函數都可以序列化。
F. python中為什麼用json有什麼作用
今天我也在這個問題上糾結很久。最後才想明白,我來回答下。
網上很多網友總結了json模塊的用法,但沒說json模塊有什麼用,幹嘛要有這個模塊。可能都明白、太簡單,覺得沒必要說。但作為小白的我不明白,而且在練習使用load()和mp()時遇到錯誤。
首先糾正,json格式不是字元串。json與python裡面的字典是一樣的格式。
python的json模塊四個方法的作用為:
mps()#把數據轉成字元串;
loads()#把字元串符號『』去掉;
mp(x,f)#將x的內容直接寫入f,不改變格式;
load(x,f)#讀取f保存為x,同樣不改變格式。
重點來了,f = open()下的read()的方法,輸出是字元串,wirte()方法的輸入也必須是字元串。
結論:因為f=open()下的讀寫方法都必須是字元串,很不方便。而非字元串的數據大多是json格式,所以就有了json模塊。方便讀寫非字元串的數據。
因為這個目的,json模塊的loads()和mps()方法有些雞肋,還造成困擾,因為明明json不是字元串,幹嘛要轉成字元串,另外mp()和load()方法表面上和它們不一樣。只有明白json模塊的目的,才會搞明白。
在python 3.6的說明文檔中,把json模塊放在了《7.2.文件讀寫》部分。我也是看到這里才去練習json模塊。但出問題,有些糊塗,明白json模塊的作用後,才更清楚幹嘛把json模塊放這里。
小白的淺見,若錯誤請指教,謝謝。
G. 如何使用 Python 得到網頁返回正確的 Json 數據
importjson
importrequests
defdemo():
url='http://api.demo.com'
params={
...
}
r=requests.get(url,params=params)
doc=json.loads(r.text)
print(doc)#這里doc就已經是轉換為pythondict的json數據了
H. python requests.post返回json()報錯
①GET
# -*- coding:utf-8 -*-
import requests
def get(url, datas=None):
response = requests.get(url, params=datas)
json = response.json()
return json
註:參數datas為json格式
②POST
# -*- coding:utf-8 -*-
import requests
def post(url, datas=None):
response = requests.post(url, data=datas)
json = response.json()
return json
註:參數datas為json格式
I. 如何在python代碼中引用json格式
使用json模塊
直接使用import json的時候就可以了