怎样抓取网页数据(如何用python解析json数据?数据怎么用解析 )

优采云 发布时间: 2022-02-12 10:00

  怎样抓取网页数据(如何用python解析json数据?数据怎么用解析

)

  python爬图时,有时候找不到对应的url,可能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()

  综上,两种方法都可以,但是第二种方法不能直接关键词搜索,但是需要针对不同的key时间修改json参数,所以没关系,主要是难找到这个动态的json数据包。一般是在XHR下的js下。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线