<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          爬蟲返回的Json數(shù)據(jù)怎么玩?一篇文章搞定!

          共 3418字,需瀏覽 7分鐘

           ·

          2020-08-01 00:40

          1、Json是什么

          JSON,全稱為JavaScript Object Notation

          JSON是輕量級的文本數(shù)據(jù)存儲和交換格式,獨立于語言。(JSON使用JavaScript語法來描述數(shù)據(jù)對象,但是JSON仍然獨立于語言和平臺,JSON解析器和JSON庫支持許多不同的編程語言)

          下面來看看Json數(shù)據(jù)到底長啥樣?

          2、Json長啥樣

          打開瀏覽器,輸入如下網(wǎng)址:“https://www.douban.com/j/search_photo?q=宋智孝”

          你要問為啥是“宋智孝”,那你自己猜吧。

          我們可以看到很清爽的 JSON 格式對象(是不是很像Python中的“字典”)

          展示的形式是這樣的:


          {
          ????"images":?[
          ????????{
          ????????????"src":?"https://img1.doubanio.com/view/photo/photo/public/p2185662697.webp",
          ????????????"author":?"蹦咕嚕霸會念經(jīng)",
          ????????????"url":?"https://www.douban.com/link2/?url=http%3A%2F%2Fwww.douban.com%2Fphotos%2Fphoto%2F2185662697%2F&query=%E5%AE%8B%E6%99%BA%E5%AD%9D&cat_id=1025&type=search",
          ????????????"id":?"2185662697",
          ????????????"title":?"有一種美叫做宋智孝",
          ????????????"width":?381,
          ????????????"height":?500
          ????????},
          ????????{
          ????????????"src":?"https://img1.doubanio.com/view/photo/photo/public/p2185662777.webp",
          ????????????"author":?"蹦咕嚕霸會念經(jīng)",
          ????????????"url":?"https://www.douban.com/link2/?url=http%3A%2F%2Fwww.douban.com%2Fphotos%2Fphoto%2F2185662777%2F&query=%E5%AE%8B%E6%99%BA%E5%AD%9D&cat_id=1025&type=search",
          ????????????"id":?"2185662777",
          ????????????"title":?"有一種美叫做宋智孝",
          ????????????"width":?452,
          ????????????"height":?600
          ????????}
          ????],
          ????"total":?2658,
          ????"limit":?20,
          ????"more":?true
          }


          數(shù)據(jù)被放到了 images 對象里,它是個數(shù)組的結(jié)構(gòu),每個數(shù)組的元素是個字典的類型。

          src、author、url、id、title、width 和height 這些字段代表的含義分別是原圖片的地址、作者、發(fā)布地址、圖片 ID、標題、圖片寬度、圖片高度等信息。

          json的格式本來就很清爽了,那我要想更加“清爽”的查看數(shù)據(jù)之間的層級關(guān)系,該怎么辦呢?

          這時候就需要用到一個插(shen)件(qi)了。

          JSON-handle(如圖)


          解析之后的數(shù)據(jù)長這樣:



          嗯,更清爽了

          3、在Python中玩轉(zhuǎn)Json

          在 Python 中有 JSON 庫,可以讓我們將 Python 對象和 JSON 對象進行轉(zhuǎn)換,便于數(shù)據(jù)的解析。

          在Json庫里有兩個方法:

          json.dumps() 將Python對象(字符串)轉(zhuǎn)換成為Json對象(字典)

          json.loads() 將Json對象轉(zhuǎn)換成為Python對象

          下面這段代碼中,通過loads()函數(shù)把data從“json?string”轉(zhuǎn)化為“dict”;又通過dumps()函數(shù)把data從“dict”轉(zhuǎn)化為“json string”(折騰來、折騰去)


          說白了就是一個“ 雙引號”的問題,把雙引號干掉,就是“dict”,放在python中就可以輕松的取到想要的節(jié)點數(shù)據(jù)。



          代碼可通過網(wǎng)址查看:

          https://tech.io/snippet/JqONpVh

          4、實戰(zhàn)演練

          打開瀏覽器,輸入如下網(wǎng)址:https://www.douban.com/j/search_photo?q=宋智孝”,獲得的src字段為圖片的url地址。



          我們要做的是把作者、原地址、標題保存為DataFrame,并存儲為csv文件,然后根據(jù)圖片的原地址把關(guān)于“宋智孝”的圖片全部下載下來。


          數(shù)據(jù)保存的代碼:


          利用request模塊獲取API的數(shù)據(jù)(記得加上headers,模擬瀏覽器的操作),然后把每一份數(shù)據(jù)存在“字典”里,再追加到“列表”中。


          利用 pandas模塊,把數(shù)據(jù)轉(zhuǎn)為DataFrame,在保存為csv文件(注意中文亂碼的問題)


          import?requests
          import?pandas?as?pd

          query?=?'宋智孝'

          headers?=?{?"user-agent":?"Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?"
          ??????????????????????????"AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/83.0.4103.106?Safari/537.36"}

          url?=?'https://www.douban.com/j/search_photo?q='?+?query
          response?=?requests.get(url,?headers=headers).json()?#?得到返回結(jié)果
          #?print(response)
          result?=?[]
          for?image?in?response['images']:????
          ????dict?=?{}
          ????dict["pic"]?=?image["src"]
          ????dict["author"]?=?image["author"]
          ????dict["title"]?=?image["title"]??
          ????result.append(dict)

          ????print(image['src'])??#?查看當前下載的圖片網(wǎng)址
          ????download(image['src'],?image['id'])??#?下載一張圖片

          result_pd?=?pd.DataFrame(result)
          result_pd.to_csv("result_pd.csv",encoding='utf_8_sig')


          下載圖片的代碼:


          根據(jù)圖片的URL地址,把圖片下載到.py文件的同級目錄,命名為“str(i).jpg”


          def?download(src,?id):
          ????dir?=?'./'?+?str(id)?+?'.jpg'
          ????try:
          ????????pic?=?requests.get(src,?headers=headers,?timeout=10)
          ????????#?print(pic)
          ????????with?open(dir,?"wb")?as?f:
          ????????????f.write(pic.content)

          ????except?requests.exceptions.ConnectionError:
          ????????print('圖片無法下載')


          運行結(jié)果:

          5、我是小結(jié)


          JSON是輕量級的文本數(shù)據(jù)存儲和交換格式,獨立于語言,可以使用Json Handle插件來“一目了然”地查看Json數(shù)據(jù)的層級關(guān)系。


          利用Json擴展庫,可以方便的把json數(shù)據(jù)轉(zhuǎn)為python數(shù)據(jù)類型,通過一個批量下載圖片的案例,介紹了Request庫與json數(shù)據(jù)的訪問。


          希望這篇文章能幫助你在Python中更好地玩轉(zhuǎn)Json數(shù)據(jù)。

          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  guochankaobishipin | 香蕉网-大香蕉网 | aa黃色片| 午夜成人免费视频 | 国产熟妇毛多 久久久久一区 |