如何用python爬取微博的数据

这又是我正在学习崔庆才大佬的爬虫文章学习和体会到的啦,,,

正文

当我们浏览微博时,会发现微博网页下面都有下拉下载更多的选项,初始的页面只有几个微博的内容,当我们到最后再向下滑动时此时会出现一个加载的标志,然后会出现新的微博内容,根据Ajax网页的特性可发现这是一个用Ajax方式渲染的网页。整个页面并没有刷新,所以可以明白这是页面在原有的基础上发送Ajax请求数据更新网页的过程。所以我们可以得到一点爬取的思路啦

  1. 知道请求是发向哪里的
  2. 请求包含哪些参数
  3. 请求是怎么发送的
    知道了这些,我们就可以得到包含我们数据的网页啦。然后再解析这些网页数据那一部分是我们想要的,然后直接用.json的解析和正则解析来提取我们想要的数据,话不多直接开整。

这里以作者崔庆才的微博为例(对不住了,我没有微博)首先进入作者的微博首页,进入XHR选项卡过滤请求,并且选中一个看起来像是加载数据的请求点击去看看。
然后看一下这个请求的url:https://m.weibo.cn/api/container/getIndex?type=uid&value=2830678474&containerid=1005052830678474 根据一点点的英语水平可以发现这就是数据请求的url啊,然后继续下话加载更多的数据,再用一个刚刚刷新出来的请求url比较一下Request URL: https://m.weibo.cn/api/container/getIndex?type=uid&value=2830678474&containerid=1076032830678474&page=2 经过简单的对比可以发现,这个网址请求就是向下加载请求数据的地址,然后发现里面请求的参数有四个 type, value, containerid, page,然后变化的就只有page再根据小学英语分析可得这是一个控制分页的参数,也就是说,我们只要改变这个参数就可以得到新的数据啦。
然后我们分析一下这个请求的响应内容以便得到我们想要的数据,点进去浏览器的 preview 选项,由于Ajax请求到的是json格式的,我们的浏览器为我们做了解析,其中点开data选项,有两个分节点 cardlistinfo饱含着一些当前card内容的标识信息,和一些微博用户的总体信息,然后重要的是 card 里面包含着很多的信息,这里面就有我们要的信息,他是一个列表,包含着十个元素,点开一个观察可以发现里面就是微博的内容,其中比较重要的字段是 mblog 字段,我们要的信息都在这里面。
所以经过上面的分析可得我们只要做一个简单的循环改变requet的 page 的值就可以得到所有的微博数据啦。下面附上代码


from pyquery import PyQuery as pq
from urllib.parse import urlencode
import requests
import jsonbase_url = 'https://m.weibo.cn/api/container/getIndex?'headers = {'Host': 'm.weibo.cn','Referer': 'https://m.weibo.cn/u/2830678474','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36','X-Requested-With': 'XMLHttpRequest',
}def get_page(page):params = {'type': 'uid','value': '2830678474','containerid': '1076032830678474','page': page}url = base_url + urlencode(params)try:response = requests.get(url, headers=headers)if response.status_code == 200:return response.json()except requests.ConnectionError as e:print('error', e.args)def parse_page(json):if json:items = json.get('data').get('cards')for index, item in enumerate(items):    ###########为什么要加上 index??????????? index是索引,items是一个字典,取出来的时候要用索引一起item = item.get('mblog', {})weibo = {}weibo['id'] = item.get('id')weibo['text'] = pq(item.get('text')).text()weibo['attitudes'] = item.get('attitudes_count')weibo['comments'] = item.get('comments_count')weibo['reposts'] = item.get('reposts_count')yield weiboif __name__ == '__main__':for page in range(1, 10):json = get_page(page)results = parse_page(json)for result in results:print(result)

这里没有包括下载图片的板块,需要的可以在评论下告诉我。

用python3爬取微博的数据和图片相关推荐

  1. Selenium+Python3爬取微博我发出的评论信息

    Selenium+Python3爬取微博我发出的评论信息 需求 代码 注: 需求 记录对话信息:对话文本.时间.用户.被回复链接.被回复用户.被回复文本. 将数据信息持久化保存,可选择截图. 代码 # ...

  2. python3爬取微博评论并存为xlsx

    ** python3爬取微博评论并存为xlsx ** 由于微博电脑端的网页版页面比较复杂,我们可以访问手机端的微博网站,网址为:https://m.weibo.cn/ 一.访问微博网站,找到热门推荐链 ...

  3. Selenium+Python3爬取微博私信

    Selenium+Python3爬取微博私信 需求 缺陷 代码 需求 爬取微博私信信息,包括:文本.对话者信息.图片路径,并将截图.文本留存. 缺陷 微博私信网页长时间查看时,经常有刷新失败.页面崩溃 ...

  4. 【Python爬虫实例学习篇】——5、【超详细记录】从爬取微博评论数据(免登陆)到生成词云

    [Python爬虫实例学习篇]--5.[超详细记录]从爬取微博评论数据(免登陆)到生成词云 个人博客地址:ht/tps://www.asyu17.cn/ 精彩部分提醒: (1)微博评论页详情链接为一个 ...

  5. python爬取微博评论数据的github链接_GitHub - 13633825898/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...

    功能 爬取新浪微博信息,并写入csv/txt文件,文件名为目标用户id加".csv"和".txt"的形式,同时还会下载该微博原始图片(可选). 本程序需要设置用 ...

  6. python3爬取微博评论教程_用python 爬取微博评论,怎么打开微博评论下的查看更多|...

    怎样用python爬新浪微博大V所有数据 先上结论,通过公开的api如爬到某大v的所有数据,需足以下两个条件: 1.在你的爬虫开始运行时,该大v的所有微博发布量没有超过回溯查询的上限,新浪是2000, ...

  7. python爬取微博评论数据的github链接_GitHub - guozifeng91/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...

    功能 爬取新浪微博信息,并写入csv/txt文件,文件名为目标用户id加".csv"和".txt"的形式,同时还会下载该微博原始图片和微博视频(可选). 本程序 ...

  8. python爬取微博评论数据的github链接_GitHub - DABOLUO111/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...

    功能 爬取新浪微博信息,并写入csv/txt文件,文件名为目标用户id加".csv"和".txt"的形式,同时还会下载该微博原始图片和微博视频(可选). 本程序 ...

  9. Python3爬取京东商品数据,解决赖加载问题

    前言 在这里我就不再一一介绍每个步骤的具体操作了,因为在上一次爬取今日头条数据的时候都已经讲的非常清楚了,所以在这里我只会在重点上讲述这个是这么实现的,如果想要看具体步骤请先去看我今日头条的文章内容, ...

最新文章

  1. SpringMVC解决@ResponseBody返回乱码问题
  2. 电路 | 稳压电路设计
  3. 你人脉网中应该有的10种人
  4. flask web开发的相关博文学习
  5. es6 依赖循环_require 和 import 的循环依赖详解
  6. 【Elasticsearch】es node 节点
  7. 利用vertical-align:middle实现在整个页面居中
  8. Web Server与App Server
  9. 106个计算机学部毕业设计项目大全(附源码)
  10. 如何实现微信扫码登录--OAuth2
  11. ASP.NET mvcConf Videos Available
  12. python经典教程游戏软件_手把手带领大家用Python来做经典游戏 — 贪吃蛇
  13. 基于单片机电梯5层带模拟控制系统设计(毕设)
  14. windows代码设置默认音频输出设备
  15. 回复英文审稿人意见常用格式
  16. springmvc与ajax
  17. 工作这两年的经验与教训
  18. JS打包工具rollup——完全入门指南
  19. pandas - 股票K线数据重采样
  20. Power BI中如何处理相同名称的客户

热门文章

  1. Android抬手亮屏
  2. 错题本2020.5.2
  3. sweetalert php,SweetAlert详解
  4. 关于去除猪肉腥味的方法,台湾叫“跑活水”
  5. 如何将动态图片和文字转为一张图片
  6. 分享:如何在word中高亮代码
  7. 防止盲人摸象-多角度看问题
  8. 【JavaWeb—HTML标签】
  9. 亮度 对比度 饱和度 灰度【转】
  10. 开发技能 | 如何在 Github 上给开源项目提交 PR?