Python获取jsonp数据

这篇具有很好参考价值的文章主要介绍了Python获取jsonp数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用python爬取数据时,有时候会遇到jsonp的数据格式,由于不是json的,所以不能直接使用json.loads()方法来解析,需要先将其转换为json格式,再进行解析。在前面讲了jsonp的原理 ,这里就略过一部分。

jsonp的格式

jsonp的内容一般是这样的:

callback({
    "name":"zhangsan",
    "age":18
})

也有有可能是这样的:

callback(
    'name',
    (function(a,b,c){
        return {
            name:a,
            age:b,
            gender:c
        }
    })('孙悟空',18,'男')
)

这里的callback就是一个函数名,这个函数名是由后端返回的,我们需要将这个函数名提取出来,然后将其替换为一个我们自己定义的函数名,然后再将其转换为json格式,再进行解析。

这个函数名一般会包含在get请求的参数中,例如:

<script src="xxx.xxx?callback=cb"></script>

在这个url中,callback=cb是我们传给服务器的参数,我们可以理解为告诉服务器我们需要将数据传入cb这个函数中,然后服务器返回的数据就会以cb(data)的形式返回,例如:

cb({
    "name":"zhangsan",
    "age":18
})
获取数据
方法一

通常情况下服务器返回的数据调用哪个函数由传递的callback参数决定,如果我们将callback的参数改为我们自己定义的函数名,那么服务器就会返回这个函数名。
因此,我们也可以尝试将callback参数填写为空,例如:

import requests
requests.get('xxx.xxx?callback=')

这样服务器就会直接返回数据而不是用函数包裹

方法二

通过字符串切片或者正则表达式来提取数据,例如:


import requests
import re
res = requests.get('xxx.xxx?callback=cb')
# 正则表达式提取
data = re.search('cb\((.*?)\)',res).group(1)
# 字符串切片提取
data = res[3:-1] 
方法三

使用subprocess库执行js代码,但是jsonp返回的数据中只有一个调用函数的代码,因此我们需要提前定义一个函数,并将内容写入js文件后执行,例如:

import requests
import subprocess

cb_data = requests.get('xxx.xxx?callback=cb').text
# 定义一个函数
js = '''   
function cb(data) {
    console.log(data);
}
'''
# 将函数写入js文件
with open('jsonp.js','w',encoding='utf-8') as f:
    f.write(js+cb_data)

# 执行js文件的同时捕获打印信息
result = subprocess.run('node jsonp.js',shell=True,stout=subprocess.PIPE)
# 将结果转换为json
json = json.loads(res.stdout.decode())
""" json转换时可能会出错,因此可以在定义的函数中将console.log(data) 修改为 console.log( JSON.stringify(data)) """
# 打印转换后的内容
print(json)

以上,简单的介绍了三种获取jsonp数据的方式,如果有错误或不足之处欢迎指正文章来源地址https://www.toymoban.com/news/detail-437474.html

到了这里,关于Python获取jsonp数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫|使用Selenium轻松爬取网页数据

    1. 什么是selenium? Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作浏览器一样。支持的浏览器包括IE,Firefox,Safari,Chrome等。 Selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用

    2024年02月04日
    浏览(55)
  • 六个步骤学会使用Python爬虫爬取数据(爬虫爬取微博实战)

    用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。 第一步:安装requests库和BeautifulSoup库 在程序中两个库的书写是这样的: 由于我使用的是pycharm进行的python编程。所以

    2024年02月08日
    浏览(54)
  • 华纳云:Python中如何使用Selenium爬取网页数据

    这篇文章主要介绍“Python中如何使用Selenium爬取网页数据”,在日常操作中,相信很多人在Python中如何使用Selenium爬取网页数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中如何使用Selenium爬取网页数据”的疑惑有所帮助!接下

    2024年02月07日
    浏览(66)
  • Python中使用隧道爬虫ip提升数据爬取效率

    作为专业爬虫程序员,我们经常面临需要爬取大量数据的任务。然而,有些网站可能会对频繁的请求进行限制,这就需要我们使用隧道爬虫ip来绕过这些限制,提高数据爬取效率。本文将分享如何在Python中使用隧道爬虫ip实现API请求与响应的技巧。并进行详细的解析和实际代码

    2024年02月12日
    浏览(44)
  • 【Python网络爬虫】三分钟教会你使用SeleniumWire快速爬取数据

    在终端使用pip进行安装 pip install xxx 这里我使用的是Chrome,其中列举了几个常用的option,供大家学习使用 option = webdriver.ChromeOptions():设置Chrome启动选项 option.add_argument(‘headless’):不打开浏览器进行数据爬取,因为没有可视化过程,所以推荐整个流程开发完毕后,在使用此条

    2024年02月21日
    浏览(49)
  • 快乐学Python,使用爬虫爬取电视剧信息,构建评分数据集

    在前面几篇文章中,我们了解了Python爬虫技术的三个基础环节:下载网页、提取数据以及保存数据。 这一篇文章,我们通过实际操作来将三个环节串联起来,以国产电视剧为例,构建我们的电视剧评分数据集。 收集目前国产电视剧的相关数据,需要构建国产电视剧和评分的

    2024年01月21日
    浏览(50)
  • Python网络爬虫逆向分析爬取动态网页、使用Selenium库爬取动态网页、​编辑将数据存储入MongoDB数据库

    目录 逆向分析爬取动态网页 了解静态网页和动态网页区别 1.判断静态网页  2.判断动态网页  逆向分析爬取动态网页 使用Selenium库爬取动态网页 安装Selenium库以及下载浏览器补丁 页面等待  页面操作 1.填充表单 2.执行JavaScript 元素选取 Selenium库的find_element的语法使用格式如下

    2024年02月15日
    浏览(109)
  • 如何使用python实现简单爬取网页数据并导入MySQL中的数据库

    前言:要使用 Python 爬取网页数据并将数据导入 MySQL 数据库,您需要使用 Requests 库进行网页抓取,使用 BeautifulSoup 库对抓取到的 HTML 进行解析,并使用 PyMySQL 库与 MySQL 进行交互。 以下是一个简单的示例: 1.  安装所需库: ``` ``` 2.  导入所需库: ``` ``` 3.  建立数据库连接:

    2024年02月04日
    浏览(47)
  • 使用Python爬取GooglePlay并从复杂的自定义数据结构中实现解析

    【作者主页】: 吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建

    2024年02月04日
    浏览(46)
  • Python爬虫入门:使用selenium库,webdriver库模拟浏览器爬虫,模拟用户爬虫,爬取网站内文章数据,循环爬取网站全部数据。

    *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。 目录 准备工具: 思路: 具体操作: 调用需要的库: 启动浏览器驱动: 代码主体:  完整代码(解析注释): Python环境; 安装selenium库; Python编辑器; 待爬取的网站; 安装好的浏览器; 与浏览器版本相对应的

    2023年04月24日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包