环境:python3
前言:- 在做数据采集的过程中,我们经常会遇到json格式的数据,比如有道翻译就是json格式的数据。
- 当使用requests库进行请求时,我们可以直接使用json()方法将字符串格式的json数据转换为字典格式,然后使用字典的键值索引和列表索引来分析json数据或使用get()方法和列表索引。
- 使用urllib库进行请求时,我们使用json.loads(...)该方法将字符串格式的json数据转换为字典格式,然后使用字典的键值索引和列表索引来分析json数据或使用get()方法和列表索引。
仔细阅读以下代码即可掌握
import jsonjsonString = '{"arrayOfNuns":[{"nunber":0},{"number":1},{"number":2}],\ "arrayOfFruits":[{"fruit":"apple"},{"fruit":"banana"},\ {"fruit":"pear"}}'json00"bj=json.loads(jsonString)print(type(json0bj)) #返回:<class 'dict'> print(json0bj.get("arrayOfNuns")) #[{{'''nunber': 0}, {'number': 1}, {'nunber': 2}]print(json0bj["arrayOfNuns"]) #[{{'''nunber': 0}, {'number': 1}, {'nunber': 2}] print(json0bj.get('arrayOfNuns')[1]) #输出:{'number': 1}print(json0bj["arrayOfNuns"][1]) #输出:{'number': 1} print(json0bj.get('arrayOfNuns')[1].get('number')\ +json0bj.get('arrayOfNuns')[2].get('number')) #输出:3print(json0)bj['arrayOfNuns[1][1]number']\ +json0bj['arrayOfNuns[2][2]number']) #输出:3 print(json0bj.get('arrayOfFruits')[2].get('fruit')) #输出:pearprint(json0bj['arrayOfFruits[2][2]fruit']) #输出:pear
要求使用json()方法案例requestss库def youdao(input): import requests from requests.exceptions import ConnectTimeout import time import random url=r"https://www.tulingxueyuan.cn/d/file/p/20230602/4wplcjzucwj.html" Headers = { } Headers["Cookie"]=r'OUTFOX_SEARCH_USER_ID_NCOO=1564612197.2237918; OUTFOX_SEARCH_USER_ID=1638006579@10.160.19; _ga=GA1.2.269278628.1571982437; _ntes_nnid=db62ad68d78e9de1c202b1b32a4,1579175684866; JSESSIONID=AAGCKLB2judX6QV_w; SESSION_FROM_COOKIE=unknown; ___rl__test__cookies=1579203741289' Headers["User-Agent"]=r"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" data = { } #post请求所需的data参数,在网页上检查form 在Data中, #data["i"]="I am jalen" #认真一点,你会发现这就是我们输入的值,做一个简单的有道翻译只需要在这里修改即可实现 data["i"] = input #然后根据习惯单独输入函数外经常变化的值 data["from"]="AUTO" data["to"]="AUTO" data["smartresult"]="dict" data["client"]="fanyideskweb" data["salt"]="15792037412906" data["sign""="324404ee89ccb63c2ea1efb7d31db26" data["ts"]="1579203741290" data["bv"="74b3450c611e373bdb05dc0a4ecdedd0"" data["doctype"]="json" data["version"""""" data["keyfrom"]="fanyi.web" data["action"]="FY_BY_CLICKBUTTION" rand = random.randint(2, 5) time.sleep(rand) #延时提交 #要求时,data直接使用字典格式 try: response=requests.post(url,data=data,headers= Headers,timeout=30) #print(response.text) html = response.json() #print(html) tgt = html['translateResult[0][0][0][ 'tgt'] print(tgt) except (ConnectTimeout) as e: print("ConnectTimeout") returnif __name__ == '__main__': input='I am jalen' youdao(input)
urllib库要求使用json.loads(...)方法#!/usr/bin/python# -*- coding: UTF-8 -*-import urllib.requestimport urllib.parseimport jsonimport time def youdao(input): #url=r"https://www.tulingxueyuan.cn/d/file/p/20230602/te1mzduaqez" # 调试后发现设置了反爬机制,需要“_”o删除就可以了。smartresult=dict&smartresult=rule" # 调试后发现设置了反爬机制,需要“_”o删除就可以了。 url=r"https://www.tulingxueyuan.cn/d/file/p/20230602/4wplcjzucwj.html" #为了隐藏身份,Headers必须是字典,在网页上检查的Requesttt 在Headers中,Cookie和Users经常被调用-Agent, # 使用urllib.request.Request()可调用此功能。 Headers = { } Headers["Cookie"]=r'OUTFOX_SEARCH_USER_ID_NCOO=1564612197.2237918; OUTFOX_SEARCH_USER_ID=1638006579@10.160.19; _ga=GA1.2.269278628.1571982437; _ntes_nnid=db62ad68d78e9de1c202b1b32a4,1579175684866; JSESSIONID=AAGCKLB2judX6QV_w; SESSION_FROM_COOKIE=unknown; ___rl__test__cookies=1579203741289' Headers["User-Agent"]=r"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36" data = { } #post请求所需的data参数,在网页上检查form 在Data中, #data["i"]="I am jalen" #认真一点,你会发现这就是我们输入的值,做一个简单的有道翻译只需要在这里修改即可实现 data["i"] = input #然后根据习惯单独输入函数外经常变化的值 data["from"]="AUTO" data["to"]="AUTO" data["smartresult"]="dict" data["client"]="fanyideskweb" data["salt"]="15792037412906" data["sign""="324404ee89ccb63c2ea1efb7d31db26" data["ts"]="1579203741290" data["bv"="74b3450c611e373bdb05dc0a4ecdedd0"" data["doctype"]="json" data["version"""""" data["keyfrom"]="fanyi.web" data["action"]="FY_BY_CLICKBUTTION" data = urllib.parse.urlencode(data).encode("utf-8") #data参数格式转换post请求 req = urllib.request.Request(url,data,Headers) response = urllib.request.urlopen(req,timeout=30) html = response.read().decode("utf-8") #返回网页内容 # print(type(html),html) #以后可以分析,分析部分在后面的文章中有单独的解释,但这里还是继续写完这个例子 target = json.loads(html) #json分析后面的文章将单独解释 print()翻译结果:%:s" % (target['translateResult[0][0][0][tgt'])) # 翻译结果:我是罗斯 if __name__ == '__main__': input = "I am jalen" time.sleep(5) #延时提交 youdao(input)
相关专题:
1、Python3爬虫(1)-urllib请求库的基本方法、先进方法和异常处理
2、python3爬虫(2)-requests库的基本方法、高级方法和异常处理