目录

JSON

抓取网页动态Ajax请求的数据

练习:爬取糗事百科的段子


JSON

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON语法规则

在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:

  • 对象表示为键值对
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON键/值对

JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值:

概念:一种保存数据的格式
作用:可以保存本地的json文件,也可以将json串进行传输,通常将json称为轻量级的传输方式
json文件组成

  • {}    代表对象(字典)
  • []    代表列表
  • :     代表键值对
  • ,     分隔两个部分

 

例子:将json格式的字符串转换成python对象

import json
#将json格式的字符串转换成python对象
jsonstr = '{"name":"boynextdoor","age":33,"hobby":["money","fight","sleep"],"parames":{"a":1,"b":2}}'

jsondata = json.loads(jsonstr)
print(jsondata)
print(type(jsondata))
print(jsondata['hobby'])

运行结果:

java抓包转码 抓包json_java抓包转码

例子:将python对象转换成json格式的字符串

import json
#将python对象转换成json格式的字符串
jsonstr = {"name":"boynextdoor","age":33,"hobby":["money","fight","sleep"],"parames":{"a":1,"b":2}}
jsondata = json.dumps(jsonstr)
print(jsondata)
print(type(jsondata))

运行结果:

java抓包转码 抓包json_python_02

 

抓取网页动态Ajax请求的数据

#抓取网页动态Ajax请求的数据
import urllib.request
import json
import ssl

def ajaxCrawler(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60'
    }
    req = urllib.request.Request(url,headers=headers)
    #使用ssl创建未验证的上下文
    context = ssl._create_unverified_context()
    response = urllib.request.urlopen(req,context=context)

    jsonStr = response.read().decode('utf-8')
    jsonData = json.loads(jsonStr)

    return jsonData

url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=20&limit=20'
info = ajaxCrawler(url)
print(info)

运行结果:

java抓包转码 抓包json_java抓包转码_03

 

练习:爬取糗事百科的段子

先找到要爬取的页面

java抓包转码 抓包json_JSON_04

然后在该页面中找到每条段子的用户<div class="author clearfix">和内容<div class="content">,应在后面再加参数re.S,表示匹配所有字符

最终代码:

import urllib.request
import json
import ssl
import re

def Crawler(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60'
    }
    req = urllib.request.Request(url,headers=headers)
    #使用ssl创建未验证的上下文
    context = ssl._create_unverified_context()
    response = urllib.request.urlopen(req,context=context)

    Html = response.read().decode('utf-8')
    pat = r'<div class="author clearfix">(.*?)<span class="stats-vote"><i class="number">'
    re_joke = re.compile(pat,re.S)
    divlist = re_joke.findall(Html)
    dic = {}
    # print(divlist)
    # print(len(divlist))
    for div in divlist:
        #用户名
        name = re.compile(r'<h2>(.*?)</h2>',re.S)
        username = name.findall(div)
        username = username[0]
        # print(username)
        #内容
        cont = re.compile(r'<div class="content">\n<span>(.*?)</span>', re.S)
        neirong = cont.findall(div)
        neirong = neirong[0]
        # print(neirong)

        dic[username] = neirong
    return dic


url = 'https://www.qiushibaike.com/text/page/1/'
info = Crawler(url)
for k,v in info.items():
    print(k + '说:' + v)

运行结果:

java抓包转码 抓包json_java抓包转码_05

java抓包转码 抓包json_JSON_06