当前位置: 首页 > 图灵资讯 > 技术篇> python3爬虫(3)--解析json数据

python3爬虫(3)--解析json数据

来源:图灵教育
时间:2023-06-02 09:31:11

环境:python3

前言:
  • 在做数据采集的过程中,我们经常会遇到json格式的数据,比如有道翻译就是json格式的数据。
  • 当使用requests库进行请求时,我们可以直接使用json()方法将字符串格式的json数据转换为字典格式,然后使用字典的键值索引和列表索引来分析json数据或使用get()方法和列表索引。
  • 使用urllib库进行请求时,我们使用json.loads(...)该方法将字符串格式的json数据转换为字典格式,然后使用字典的键值索引和列表索引来分析json数据或使用get()方法和列表索引。
分析json的方法

仔细阅读以下代码即可掌握

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库的基本方法、高级方法和异常处理