1. 程式人生 > >如何獲得網頁中的json數據

如何獲得網頁中的json數據

get sea query decode 出現 alt 動態 通過 抓取圖片

在python抓取圖片的時候,有時候卻找不到對應的網址,可能存在json中,所以如何用python解析json數據,小白看了幾個論壇後自己總結一些以便加深印象。

1.requests.get(url,params) 獲得請求數據

import requests

def get_many_pages(keyword, page):
  params = []#收集不同頁面的json數據
  for i in range(30, 30*page, 30):#動態加載,每頁30個
    params.append({
        tn: resultjson_com,
        ipn
: rj, ct: 201326592, is: ‘‘, fp: result, queryWord: keyword, cl: 2, lm: -1, ie: utf-8, oe: utf-8, adpicid: ‘‘, st: -1, z: ‘‘, ic: ‘‘, word: keyword, s: ‘‘
, se: ‘‘, tab: ‘‘, width: ‘‘, height: ‘‘, face: 0, istype: 2, qc: ‘‘, nc: ‘‘ , fr: ‘‘, pn: i, rn: 30, gsm: 1e, 1517048369666: ‘‘ }) #json的Query String paramters 是動態的 json_url
= https://image.baidu.com/search/acjson‘#json的init地址 json_datas = []#用於收集所有頁面的json數據 for param in params:#分別取出每個動態的參數,是一個字典形式 res = requests.get(json_url, params = param)#獲取json地址 res.encoding = utf-8‘#轉化為utf-8格式 json_data = res.json().get(data)#解析json數據成字典,通過get方法找出data中的值 json_datas.append(json_data)#把所有頁的json數據取回

return json_datas def get_url(): json_datas = datalist#獲取所有頁的json數據 #print(json_datas) for each_data in json_datas:#解開列表嵌套 for each_dict in each_data:#解開列嵌套直到出現字典 each_url = each_dict.get(thumbURL)#獲取字典中的地址 print(each_url) datalist = get_many_pages(暴漫表情包,3) get_url()


1. urllib.request + json 獲得請求數據

# -*- coding: utf-8 -*-
‘‘‘ Created on Sat Jan 27 22:39:15 2018 @author: zhuxueming‘‘‘
import urllib.request
import json
def get_many_pages(page):
  json_datas = []
  for i in range(30,30*page,30):#這裏由於網址中有多個%所以采用.format不能用%來格式化,根據json的地址發現,只有1517056200441=後面的數字變化在不同的頁面中,所以單獨改這一個就可以
    json_url = http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E6%9A%B4%E6%BC%AB%E8%A1%A8%E6%83%85%E5%8C%85&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&word=%E6%9A%B4%E6%BC%AB%E8%A1%A8%E6%83%85%E5%8C%85&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&fr=&pn={0}&rn=30&gsm=3c&1517056200441=.format(i)
    res = urllib.request.urlopen(json_url)#獲得網址數據
    html = res.read().decode(utf-8)#讀取數據並轉化為utf-8
    json_data = json.loads(html).get(data)#用json轉化為字典獲取data裏的數據
    json_datas.append(json_data)#合並不同頁面的數據
  return json_datas


def get_url():
  json_datas = datalist#獲取所有頁的json數據
  #print(json_datas)
  for each_data in json_datas:#解開列表嵌套
    for each_dict in each_data:#解開列嵌套直到出現字典
      each_url = each_dict.get(thumbURL)#獲取字典中的地址
      print(each_url)
   
datalist = get_many_pages(3) 
get_url()   

綜上兩個方式都可以使用,只是第二種不能直接關鍵詞搜索,但不同關鍵次需要修改json參數,所以也無妨,主要就是找到這個動態的json數據包比較困難,一般在js下貨XHR下面。

技術分享圖片

如何獲得網頁中的json數據