首页 > 其他分享 >使用Requests模块进行微博爬虫教程【网络请求分析文档】

使用Requests模块进行微博爬虫教程【网络请求分析文档】

时间:2023-05-20 19:22:30浏览次数:56  
标签:请求 爬虫 page 获取 微博 https Requests id

目录

写在前面

  • 该文档是某课程实验需要而整理的,各个接口分析仅凭我个人理解,各个参数以及数据的含义也只是我个人的推测,如有错误的地方,欢迎在评论区或私信指正。
  • 使用Python对微博进行爬虫的方法有很多,Github上也有很多大神做好的爬虫程序可以拆箱即用。做这个接口分析只是我的个人爱好,另外我比较懒,不想研究怎样使用Selenium等框架,所以整理出一份可以仅仅使用Requests模块实现爬虫效果的文档,读者可以根据自己的需求进行使用。
  • 文档内容都是我在浏览器中查看网络请求自行分析出来的,整理不易,转载请标明出处。

请求热搜

对web站请求如下URL即可

Method='GET'

https://weibo.com/ajax/statuses/hot_band

获得的数据如上图所示,band_list即为热搜列表,一条数据中包含了一些热搜的主要信息category是热搜包含内容的分类;note是词条内容;num大概是某个衡量热度的值(浏览量等等...),可以num越大的词条排的位置越靠前;其他信息可以按照类似的方法以及它的字面意思分析一下...

获取某个热搜下的内容

Method='GET'

https://m.weibo.cn/api/container/getIndex?containerid=231522type%3D1%26t%3D10%26q%3D%23词条的文字内容%23&luicode=10000011&lfid=100103type%3D38%26q%3D词条的文字内容%26t%3D0&page_type=searchall&page=页号

请求热搜部分获得到的数据中包含wordnote属性,将文本内容填入以上URL中即可,同时还可以指定页号。

https://m.weibo.cn/api/container/getIndex?containerid=231522type%3D1%26t%3D10%26q%3D%23中国星辰%23&luicode=10000011&lfid=100103type%3D38%26q%3D中国星辰%26t%3D0&page_type=searchall&page=1 这个URL举例,请求到的内容如下图所示:

在这里插入图片描述

一般微博的内容都放在card_type为9的卡片中,通过循环遍历提取出card_type为9的卡片即可。

在这里插入图片描述

如上是其中一张卡片,对它分析:一般内容都存在mblog属性下,包含的内容非常多。

在这里插入图片描述

在这里插入图片描述

  1. 最重要的是idmid,这是这条微博的标识(貌似这两个值通常是相同的,用一个就可以了)。

  2. isLongText是一个很重要的标志位,因为微博展示的时候对于很长的文本内容会做折叠,在末尾会显示"...展开全文"等样式。只有用户点击了这个链接才会再请求完整内容。这个标志位如果是false,那么想提取微博的文本内容直接拿这个卡片的text属性即可。如果它是true,那么text中就不包含文本的全部内容,需要请求另外的API接口,通过id即可获得到全部的文本内容,详见获取长微博的完整文本内容

  3. pic_flag代表这条微博是否包含了图片内容,值为1说明包含了图片,为0说明不含图片,相应地pic_num表示这条微博包含的图片数量,由此可以再看到pic_idspics,这两个属性包含的都是这条微博里图片的id,根据这些id即可请求相应的API接口获得到图片,详见获取图片

    建议:实际观察中发现,有些接口返回的数据中可能没有pic_flag,所以使用pic_num是否为0来判断可能更稳一些)

另外,下面这个接口能根据微博ID获得一些信息,大部分与上面的数据内容类似:

Method='GET'

https://weibo.com/ajax/statuses/show?id=微博ID

在这里插入图片描述

注意:有一点值得注意,如何判断一条微博是纯文本、含图片还是含视频呢?目前我的分析是这样的:这里获得的数据包,page_info只会出现在含视频的微博中,而对于纯文本和图片的微博是不含这个数据的。

于是可以采用这样的逻辑:含有page_info的是视频微博,不含page_infopic_num不为0的为图片微博,不含page_infopic_num为0的是纯文本的微博。

获取长文本

Method='GET'

https://m.weibo.cn/statuses/extend?id=微博ID

在获得卡片数据后,得到最重要的信息就是id,这应该是一条微博的唯一标识。获得id后填入上述URL即可获得到新的信息:

在这里插入图片描述

可以看到里面包含了longTextContext,这就是这条微博所有文本内容。另外三个属性分别是这条微博的点赞、评论、转发数量。

获取图片

第一种方法:

Method='GET'

https://wx4.sinaimg.cn/orj360/图片ID

如上所示,将服务器返回的内容保存即可。

另外一种方法(更推荐):

Method='GET'

在这里插入图片描述

如上图所示,在之前获得的card中,pics字段下直接包含着图片的URL,所以可以直接提取出这个URL进行图片获取。

更推荐使用第二种方法,因为上面那个根据ID请求图片是我自己分析得到的,不确定是不是每个ID都能在那个域下获得,而它包含的URL是准确的图片位置,只需再次请求就可以获得。

获取评论

获取评论分为获取第一组评论和获取后续评论。

第一部分

获取第一组评论的接口如下:

Method='GET'

https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=4894355107612311&is_show_bulletin=2&is_mix=0&count=10&uid=5508233899&fetch_level=0

获取第一组评论的参数如下:

params = {
    'is_reload': 1,  # 是否重新加载数据到页面
    'id': 4894355107612311,  # 微博文章的id,可以在搜索页面中获得
    'is_show_bulletin': 2, 
    'is_mix': 0,  
    'count': 10,  # 推测是获取每页评论条数,但实际上返回的数据可能不是这个数量
    'uid': 5508233899,  # 发布这篇微博的用户id,根据测试这个参数可以不带
    'fetch_level':0
}

在这里插入图片描述

上图为请求到的数据,data是包含着一些评论的列表,从中可以获得到评论的各种信息。

max_id对于后续请求非常重要!!!

后续部分

获取后续评论的接口如下:

Method='GET'

https://weibo.com/ajax/statuses/buildComments?flow=0&is_reload=1&id=4894419260540402&is_show_bulletin=2&is_mix=0&max_id=138317572852662&count=20&uid=1878335471&fetch_level=0

获取后续评论的参数如下:

params = {
    'flow': 0,  # 根据什么获取,0为热度,1为发布时间
    'is_reload': 1,  # 是否重新加载数据到页面
    'id': 4894419260540402,  # 微博文章的id
    'is_show_bulletin': 2,
    'is_mix': 0,
    'max_id': 138317572852662,  # 用来控制页数的,这个可以在上一个数据包的响应的max_id
    'count': 20,  # 推测是获取每页评论条数
    'uid': 1878335471,  # 发布这篇微博的用户id,根据测试这个参数可以不带
    'fetch_level':0
}

相较于“获取第一组评论”,这里的请求参数新增了flow,另外就是非常重要的max_id,这个参数是根据上一个响应数据得到的,也就是说要想继续请求数据,必须知道上一次响应数据中的max_id并拿来作为这次请求的参数。

注意:对于评论数较少的微博,请求完之后貌似返回的max_id是0,这可以作为评论是否爬完的标志。

获取某个用户的微博

分为请求第一部分和后续部分:

第一部分

第一部分URL如下:

Method='GET'

https://weibo.com/ajax/statuses/mymblog?uid=用户ID&page=1&feature=0

注意 :该请求需要添加请求头信息,其中需要附带cookie,获得方法是在浏览器控制台中查看网络请求,然后将请求头的cookie复制下来。另外要注意,cookie是有生命周期的,超过时间限制之后需要更新cookie。该请求如果不加cookie请求结果将不包含信息。

请求得到的响应数据如下所示:

在这里插入图片描述

这里有一个后续请求需要使用到的参数since_id需要保存下来。然后list中包含的就是第一部分的各条微博内容。

补充 :经过测试,since_id可以不加,后续只改page就可以了。

后续部分

后续部分请求URL如下:

Method='GET'

https://weibo.com/ajax/statuses/mymblog?uid=用户ID&page=页号&feature=0&since_id=前一次请求的响应数据中的since_id

获取完全部微博的判断依据:看某次请求之后list是否为空了。(有的用户微博非常多,所以不建议一直获取完)

只改page就可以了。

后续部分

后续部分请求URL如下:

Method='GET'

https://weibo.com/ajax/statuses/mymblog?uid=用户ID&page=页号&feature=0&since_id=前一次请求的响应数据中的since_id

获取完全部微博的判断依据:看某次请求之后list是否为空了。(有的用户微博非常多,所以不建议一直获取完)

标签:请求,爬虫,page,获取,微博,https,Requests,id
From: https://www.cnblogs.com/yxy1031/p/17417662.html

相关文章

  • 微博官方API使用教程【全流程教学】
    目录微博开发者身份认证创建自己的应用新应用的相关配置基本信息高级信息微博认证流程OAuth2.0认证(核心步骤)AccessToken授权有效期接口调用Demo(以评论接口为例)微博开发者身份认证访问微博开放平台,登录自己微博账号,登录之后首先需要完善开发者的基本信息。填写完成后提交即......
  • 【爬虫数据集】李子柒YouTube频道TOP10热门视频的TOP2000热门评论,共计2W条
    目录一、背景二、爬取目标三、结果展示四、演示视频五、附完整数据一、背景这段时间,有超多小伙伴找我要YouTube数据,做数据分析、情感分析之类的研究工作,但很多人并不是计算机软件相关专业,不具备爬虫开发技术,但又有数据需求,可能是新闻传播学、社会学等相关学科,旨在分析社会热点现......
  • requests 反爬
    概述本章内容模拟浏览器登录->处理cookie防盗链处理->抓取梨视频数据代理->防止被封ip接入第三方代理cookie登录->得到cookie带着cookie去请求到需要的url#必须把上面的两个操作连起来#我们可以使用session进行请求->session可以认为是一连串的请求,中间c......
  • 异步爬虫
    异步爬虫多线程多进程协程多线程与多进程进程:运行中的程序,每次我们执行一个程序,操作系统对自动的为这个程序准备一些必要的资源(如:分配内存,创建一个能够执行的线程)线程:程序内,可以直接被CPU调度的执行过程,是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的......
  • 爬虫基础
    爬虫概述爬虫善:不破坏被爬取的网站的资源恶:影响网站的正常运营(抢票,秒杀,使网站资源宕机)爬虫的矛与盾反爬机制反反爬策略robots.txt协议第一个爬虫fromurllib.requestimporturlopenurl="http://www.baidu.com"resp=urlopen(url)content......
  • #yyds干货盘点#灵活的 Node.js 多功能爬虫库 —— x-crawl
    x-crawlx-crawl是一个灵活的Node.js多功能爬虫库。灵活的使用方式和众多的功能可以帮助您快速、安全、稳定地爬取页面、接口以及文件。如果你也喜欢x-crawl,可以给 x-crawl存储库 点个star支持一下,感谢大家的支持!GitHub:https://github.com/coder-hxl/x-crawl特征异步同步......
  • Python爬虫学习之Requests库
    Requests请求库Requests是⽤Python语⾔编写,基于urllib,采⽤Apache2Licensed开源协议的HTTP库。它⽐urllib更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。⼀句话——Python实现的简单易⽤的HTTP库1.了解requests库requests库的介绍requests是一个优雅而简单的Py......
  • Requests
    1、Requests模块说明Requests是使用 Apache2Licensed 许可证的HTTP库。用Python编写,真正的为人类着想。Python标准库中的 urllib2 模块提供了你所需要的大多数HTTP功能,但是它的API太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种......
  • 通过网站日志做网络爬虫和恶意访问分析
    普通爬虫分别查看有爬虫标志的访问次数和合计的总页面访问次数catwww.access.log|grepspider-ccatwww.access.log|wc查看爬虫来ip地址来源catwww.access.log|grepspider|awk'{print$1}'|sort-n|uniq-c|sort-nr在防火墙上对其地址做限制/e......
  • selenium爬虫被检测到如何破?
    Selenium爬虫在爬取数据时可能会被网站检测到,这是因为Selenium模拟了浏览器行为,而相对于真实用户的浏览器,Selenium模拟无法识别JavaScript代码和CSS文件。此外,网站也可能通过检测请求头、IP地址、Cookie等信息来判断是否是爬虫。以下是一些可能导致Selenium爬虫被检测到的原因:1......