python爬虫 - 爬取Ajax获取的Json格式数据(个人微博)

文章目录

  • 1. 第一步:安装requests库
  • 2. 第二步:获取爬虫所需的header和cookie
  • 3. 第三步:获取网页
  • 4. 第四步:解析网页
  • 5. 第五步:解析 json 结构数据体
  • 6. 代码实例以及结果展示

python爬虫五部曲:

  • 第一步:安装requests库

  • 第二步:获取爬虫所需的header和cookie

  • 第三步:获取网页

  • 第四步:解析网页

  • 第五步:分析得到的Json数据

1. 第一步:安装requests库

在程序中引用两个库的书写是这样的:

import requests

以pycharm为例,在pycharm上安装这个库的方法。在菜单【文件】–>【设置】->【项目】–>【Python解释器】中,在所选框中,点击软件包上的+号就可以进行查询插件安装了。有过编译器插件安装的hxd估计会比较好入手。具体情况就如下图所示。

在这里插入图片描述

2. 第二步:获取爬虫所需的header和cookie

以爬取 个人微博 的爬虫程序为例。获取header和cookie是一个爬虫程序必须的,它直接决定了爬虫程序能不能准确的找到网页位置进行爬取。

  • 首先通过浏览器,打开个人微博主页 https://m.weibo.cn/u/2830678474,

在这里插入图片描述

  • [x]按下F12,就会出现网页的js语言设计部分,找到网页上的Network部分。并选中“放大镜(过滤)”,如下图所示:

在这里插入图片描述

  • 然后按下ctrl+R刷新页面,此时发现右边 NetWork 部分出现很多信息。(如果进入后就有所需要的信息,就不用刷新了),当然刷新了也没啥问题。

在这里插入图片描述

在这里插入图片描述

  • 在选中放大镜后的输入框中,输入其中一个关注的信息,比如:马斯克,或者 招财猫,通过 放大镜 搜索 功能,搜索自己关注的信息,并点击 ”刷新按钮“,在Search 结果中,并没有显示相关的信息

在这里插入图片描述

在Name列,选中第一条结果数据,观察 Response,并不是微博页面显示的真是数据,而是后来执行 JavaScript 后再次向后台发送了 Ajax请求采获取到了数据。

通过浏览器的开发者工具中,选中 XHR,可以过滤出所有的 Ajax 请求相关的数据。

在这里插入图片描述

  • 拷贝其 cURL 信息

    在 Network --> Filter 中,关键信息进行过滤后(如:输入 2830678474),我们浏览Name这部分,找到我们想要爬取的文件(网络信息),鼠标右键,选择copy,复制下网页的URL。

    过滤后,有效信息会少很多,如下所示。选中所需的条目,右键 --> Copy --> Copy as cURL

在这里插入图片描述

  • 利用工具 Convert curl commands to code https://curlconverter.com/python/ 进行转换

在这里插入图片描述


curl 'https://m.weibo.cn/api/container/getIndex?type=uid&value=2830678474&containerid=1076032830678474&since_id=5005042991499580' \-H 'sec-ch-ua: "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"' \-H 'X-XSRF-TOKEN: 6474f0' \-H 'sec-ch-ua-mobile: ?0' \-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' \-H 'Accept: application/json, text/plain, */*' \-H 'MWeibo-Pwa: 1' \-H 'Referer: https://m.weibo.cn/u/2830678474' \-H 'X-Requested-With: XMLHttpRequest' \-H 'sec-ch-ua-platform: "Linux"' \--compressed

转换后信息如下图所示,选择【Copy to clipboard】,并黏贴到Pycharm开发环境中即可直接使用:

转换后信息如下图所示,请关注: header 中的 ‘X-Requested-With’: ‘’, 传输格式为: XMLHttpRequest。 这也标记了此请求就是 Ajax 请求。

选择【Copy to clipboard】,并黏贴到Pycharm开发环境中即可直接使用:

在这里插入图片描述

选择【Copy to clipboard】, 拷贝到 pycharm 中,可直接作为源代码使用:


import requestsheaders = {'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"','X-XSRF-TOKEN': '6474f0','sec-ch-ua-mobile': '?0','User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36','Accept': 'application/json, text/plain, */*','MWeibo-Pwa': '1','Referer': 'https://m.weibo.cn/u/2830678474','X-Requested-With': 'XMLHttpRequest','sec-ch-ua-platform': '"Linux"',
}params = {'type': 'uid','value': '2830678474','containerid': '1076032830678474','since_id': '5005042991499580',
}response = requests.get('https://m.weibo.cn/api/container/getIndex', params=params, headers=headers)

3. 第三步:获取网页

通过requests.get() 即可获取网页内容:

response = requests.get('https://m.weibo.cn/api/container/getIndex', params=params, headers=headers)print(f'response= {response}')
print(f'response.text= {response.text}')
print(f'response.json= {response.json()}')

4. 第四步:解析网页

由于 get 的结果,就是 json 数据,所以后续只需要针对 json格式进行解析即可:

在这里插入图片描述

格式化后应答数据内容如下:

在这里插入图片描述

5. 第五步:解析 json 结构数据体


json_content = response.json()
print(f'json_content.ok                              = {json_content["ok"]}')
print(f'json_content.data.showAppTips    = {json_content["data"]["showAppTips"]}')
print(f'json_content.data.cardlistInfo.total = {json_content["data"]["cardlistInfo"]["total"]}')for item in json_content["data"]["cards"]:print(f'itemid = {item["itemid"]}, 'f'scheme = {item["scheme"]} ')

6. 代码实例以及结果展示


import requestsheaders = {'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"','X-XSRF-TOKEN': 'c42512','sec-ch-ua-mobile': '?0','User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36','Accept': 'application/json, text/plain, */*','MWeibo-Pwa': '1','Referer': 'https://m.weibo.cn/u/2830678474','X-Requested-With': 'XMLHttpRequest','sec-ch-ua-platform': '"Linux"',
}params = {'type': 'uid','value': '2830678474','containerid': '1076032830678474',
}response = requests.get('https://m.weibo.cn/api/container/getIndex', params=params, headers=headers)print(f'response= {response}')
print(f'response.text= {response.text}')
# print(f'response.json= {response.json()}')json_content = response.json()
print(f'json_content.ok                       = {json_content["ok"]}')
print(f'json_content.data.showAppTips        = {json_content["data"]["showAppTips"]}')
print(f'json_content.data.cardlistInfo.total = {json_content["data"]["cardlistInfo"]["total"]}')for item in json_content["data"]["cards"]:print(f'itemid = {item["itemid"]}, 'f'scheme = {item["scheme"]} ')

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SN75107BDR 总线接收器 中文资料_PDF中文资料_参数_引脚图

SN75107BDR 规格信息: 制造商:Texas Instruments 产品种类:总线接收器 RoHS:是 接收机数量:2 Receiver 接收机信号类型:Differential 电源电压-最小:/- 4.75 V 电源电压-最大:/- 5.25 V 工作电源电流:30 mA 最小工作温度:0 C 最大工作温度: 70 C 封装 / 箱…

CSS border边框(理解网页边框制作)

目录 一、border边框介绍 1.概念 2.特点 3.功能 4.应用 二、border边框用法 1.border边框属性 2.边框样式 3.边框宽度 4.边框颜色 5.边框-单独设置各边 6.边框-简写属性 三、border边框属性 四、border边框实例 1.创建带有阴影效果的边框: 2. 创建一个类似标…

汽车企业安全上网解决方案

需求背景 成立于1866年的某老牌汽车服务独立运营商,目前已经是全球最大的独立汽车服务网络之一,拥有95年的历史,在全球150多个国家拥有17,000多个维修站,始终致力于为每一位车主提供高品质,可信赖的的专业汽车保养和维…

用友政务财务系统 FileDownload 任意文件读取漏洞复现

0x01 产品简介 用友政务财务系统具有多项核心功能,旨在满足各类组织的财务管理需求。首先,它提供了财务核算功能,能够全面管理企业的总账、固定资产、现金、应付应收等模块,实时掌握企业的财务状况,并通过科目管理、凭证处理、报表分析等功能为决策提供有力支持。 0x02 …

【Github】sync fork后,意外关闭之前提交分支的pr申请 + 找回被关闭的pr请求分支中的文件

【Github】sync fork后,意外关闭之前提交分支的pr申请 找回被关闭的pr请求分支中的文件 写在最前面原因解析提交pr,pr是什么?rebase 或者 merge 命令 找到分支中被删除的文件找到被关闭的提交请求pr方法1:在公共仓库被关闭的pr中…

Java电子签名图片生成工具类

在业务中有需要用户信息确认时候去进行电子签名,在实现电子签名存证时候,可以在前端生成图片也可以在后端生成签名存证图片,这里实现一下关于后端Java实现的方法,并总结成工具类,方便之后调用。 工具类方法一 import…

Django框架之Django安装与使用

一、Django框架下载 首先我们需要先确定好自己电脑上的python解释器环境,否则会导致后面项目所需要的库安装不了以及项目无法运行的问题。 要下载Django并开始使用它,你可以按照以下步骤进行: 1、安装Python 首先,确保你的计算…

【Redis】Redis 非关系型数据库 安装、配置、使用(全集)

目录 Redis 第一章 1、什么是redis 2、安装redis 1-7 8 3、redis使用 第二章 1、redis的使用 1、使用方式 2、使用Java代码使用redis 3、优化连接redis 2、五种数据类型 常用命令 string hash list set zset 不同数据类型存、取、遍历的方法 3、redis在项目…

Redis网络部分相关的结构体2 和 绑定回调函数细节

目录 1. struct connection ConnectionType属性 创建connection 2. struct client 3. 绑定客户端回调函数的流程 3.1. 读事件回调函数的设置 3.2. 写事件回调函数的设置 3.3. connSocketEventHandler函数 3.4. Redis5版本的设置回调函数 3.5. 个人的一些想法&#xf…

人工智能好多人都在用,那么用户画像要怎么看?

用户画像是通过对用户行为、偏好、兴趣等数据进行分析和整理,从而形成的关于特定用户群体的描述和模型。在人工智能应用中,用户画像可以起到指导个性化推荐、精准营销、产品设计等方面的作用。以下是用户画像在人工智能应用中的几个重要方面:…

汽车Type-C接口:特点与要求解析

汽车Type-C接口的需求增长 随着汽车科技的不断发展,车载电子设备的功能和数量不断增加,因此,对于汽车Type-C接口的需求也在逐渐增长。作为一种高速、多功能的连接标准,汽车Type-C接口在车载设备连接中扮演着越来越重要的角色。 …

Nginx 四层和七层代理区别、配置

四层:通过报文中的目标地址和端口,加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器,使用tcp、udp协议。 七层:"内容交换",通过报文中真正有意义的应用层内容,加上负…

Go开发者指南:`io/ioutil`库的实战应用全解

Go开发者指南:io/ioutil库的实战应用全解 概述io/ioutil函数概览ReadAllReadFileWriteFileReadDirTempFile 和 TempDir 实战技巧:使用io/ioutil进行文件操作高效读取文件文件的写入操作处理大文件的策略使用TempFile和TempDir管理临时文件 高级应用结合o…

【Leetcode】377. 组合总和 Ⅳ

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个由 不同 整数组成的数组 n u m s nums nums,和一个目标整数 t a r g e t target target 。请你从 n u m s nums nums 中找出并返回总和为 t a r g e t targ…

leetcode-二叉搜索树与双向链表-89

题目要求 思路 1.观察给的用例&#xff0c;本质上是把数据按照中序遍历连接起来 2.将结点以中序遍历的方式插入到数组中&#xff0c;注意这里是vector<TreeNode*> 3.将数组中的数据连接起来 代码实现 /* struct TreeNode {int val;struct TreeNode *left;struct TreeN…

基于昇腾AI 使用AscendCL实现垃圾分类和视频物体分类应用

现如今&#xff0c;人工智能迅猛发展&#xff0c;AI赋能产业发展的速度正在加快&#xff0c;“AI”的需求蜂拥而来&#xff0c;但AI应用快速落地的过程中仍存在很大的挑战&#xff1a;向下需要适配的硬件&#xff0c;向上需要完善的技术支持&#xff0c;两者缺一不可。 基于此&…

去雾笔记-Pixel Shuffle,逆Pixel Shuffle,棋盘效应,转置卷积

文章目录 1.Pixel Shuffle2.Inverse Pixel Shuffle3.棋盘效应4.转置卷积5.宽激活块6.PSPNet7.反射填充层&#xff08;Reflective Padding Layer&#xff09;8.tanh层 1.Pixel Shuffle Pixel Shuffle是一种用于图像超分辨率的技术&#xff0c;它通过重新排列图像的像素来增加图…

树莓派学习笔记--Wiring Pi库的安装

前言 在刚开始学习树莓派的时候&#xff0c;新版本操作系统与旧版本有一定的区别&#xff0c;就导致跟着网上的教程来出现了很多问题&#xff0c;然后网上新操作系统的教程又很少&#xff0c;就导致前些时间学习一直没有进展。最近终于是把这些问题解决了。所以记录下来这些东西…

MySql篇

索引 B-树 定义&#xff1a; 1、根节点至少包含两个孩子 2、每个节点最多包含m个孩子(m > 2)&#xff0c;m为树的深度 3、除了根节点和叶子节点&#xff0c;其他节点至少有ceil(m/2)个孩子&#xff0c;ceil函数为取上限&#xff0c;例如ceil(1.2)2&#xff0c;就是小数位…

游戏新手村18:游戏广告渠道与广告形式

上文我们说到&#xff0c;渠道为王&#xff0c;渠道可以为我们带来流量和用户&#xff0c;进而带来收入。我们可以通过哪些渠道导入用户呢&#xff1f;每个渠道有哪些优劣呢&#xff1f;在进行游戏营销推广的时候我们该如何选择呢&#xff1f; 根据付费性质&#xff0c;我们可…