python爬虫之异步加载

一.AJAX技术介绍

AJAX是Asynchronous JavaScript And XML的首字母缩写,意为异步JavaScript与XML。
使用AJAX技术,可以在不刷新网页的情况下更新网页数据。使用AJAX技术的网页,一般会使用HTML编写网页的框架。
在打开网页的时候,首先加载的是这个框架。剩下的部分将会在框架加载完成以后再通过JavaScript从后台加载。
AJAX 的一种常见用法是使用 AJAX 加载 JSON 数据,然后在浏览器端渲染。如果能直接抓取到 JSON 数据,会比 HTML 更容易解析。
AJAX 实际上也是通过 HTTP 传输数据的。

二.JSON介绍与应用

JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。网络之间使用HTTP方式传递数据的时候,绝大多数情况下传递的都是字符串。
因此,当需要把Python里面的数据发送给网页或者其他编程语言的时候,可以先将Python的数据转化为JSON格式的字符串,然后将字符串传递给其他语言,其他语言再将JSON格式的字符串转换为它自己的数据格式。
不仅是字典,Python中的列表或者包含字典的列表,也可以转换为JSON格式的字符串,
如果要把JSON格式的字符串转换为Python的字典或者列表,只需要使用一行代码即可:
如下图
这里得到的json_data就是一个字典,可以像使用普通字典一样来使用它。

#-*- cdoeing = utf-8 -*-
#@Time :    2020-12-11
#name : LBOcean
import json

json_data = {
  'basic_info': {'name': 'LBOcean',
           'age': 20,
           'sex': 'max',
           'merry': False}
  }
print("json_data的数据类型为:",type(json_data))
json_data_str= json.dumps(json_data,indent=4)#indent 缩进的意思
print(json_data_str,'son_data_str的数据类型为:',type(json_data_str))

json_data_dict = json.loads(json_data_str)
print(json_data_dict,'json_data_dict的数据类型为:',type(json_data_dict))

在这里插入图片描述

三.异步GET与POST请求

这里我们就用kingname的链接: http://exercise.kingname.info/exercise_ajax_1.html.做练习对象,由于这个网站不需要请求头,我就没有添加heads

先点开这个连接看一下,我们可以看到如下两段话
在这里插入图片描述
那我们是不是可以尝试着拿下这两段话.

import requests
url = 'http://exercise.kingname.info/exercise_ajax_1.html'
home = requests.get(url).content.decode()
print(home)

在这里插入图片描述

结果发现拿下来是这种样式,文本根本不在html里面.
现在许多网页都采用了这种叫做异步加载的数据模式.
我们就要来分析一下,如何获取到这里面的内容

在这里插入图片描述

这里我们可以看到这个请求使用GET方式,发送到http://exercise.kingname.info/ajax_1 backend,接下来我们试一试_

import requests
url = 'http://exercise.kingname.info/ajax_1_backend'
home = requests.get(url).content.decode()
print(home)

在这里插入图片描述

同样的道理,我们分析下面的一个post请求

在这里插入图片描述

这里我们可以看到,这是使用POST方式向http://exercise.kingname.info/ajax_1_postbackend 发送请求,并以JSON格式提交数据

在这里插入图片描述

这里可以看到是以JSON格式来提交数据的,所以我们也需要提交一份json数据,才能有反馈值

import requests
url = 'http://exercise.kingname.info/ajax_1_postbackend'
json_data = {'name' : 'LBOcean' , 'age' : 20}
home = requests.post(url,json=json_data).content.decode()
print(home)

在这里插入图片描述

可以看到我们很顺利的拿到了,想要的数据

  • 11
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值