专栏首页Python中文社区Python 3.6实现单博主微博文本、图片及热评爬取

Python 3.6实现单博主微博文本、图片及热评爬取

文章简介

经常刷微博的同学肯定会关注一些有比较意思的博主,看看他们发的文字、图片、视频和底下评论,但时间一长,可能因为各种各样的原因,等你想去翻看某个博主的某条微博时,发现它已经被删除了,更夸张的是发现该博主已经被封号。那么如果你有很感兴趣的博主,不妨定期将Ta的微博保存,这样即使明天微博服务器全炸了,你也不用担心找不到那些微博了。(自己的微博也同理哦。)

看网上一些微博爬虫,都是针对很早之前的微博版本,而且爬取内容不全面,比如长微博不能完整爬取、图片没有爬取或没有分类,已经不适用于对当下版本微博内容的完整爬取了。

本例主要基于Python3.6.2版本,能够实现对于单博主微博内容的完整爬取、编号整理和本地保存。

环境介绍

Python3.6.2/Windows-7-64位/微博移动端

实现目标

将微博上你感兴趣的博主微博(全部或过滤非原创等)内容获取,包括微博文本、图片和热评,文本和热评按编号存入txt文件中,图片按编号存入指定路径文件夹中。这样一来方便对你关注的微博信息进行定期保存以及后期的检索查阅,二来将这些数据获取后也可以对博主微博、评论等信息进行进一步的数据分析。

本例中获取数据保存在本地文件系统,如爬取数据量大,可考虑使用MongoDB等数据库,方便数据存储和检索查阅。

准备工作

一般来说同一网站,PC站的信息较为全面,但不易爬取,而移动端则相对来说比较简单,因此本例中选取移动端站点m.weibo.com作为入口来进行爬取。

进入所要爬取的博主的主页,以我关注的“博物杂志”为例,发现其主页url为:https://m.weibo.cn/u/1195054531?uid=1195054531&luicode=10000011&lfid=100103type%3D1%26q%3D%E5%8D%9A%E7%89%A9%E6%9D%82%E5%BF%97

其中1195054531这段数字就是我们要找的uid,然后打开在浏览器中输入url: m.weibo.cn/u/1195054531 再次进入相同主页,这时候按F12打开谷歌开发者工具,点“Network”,因为移动端站点加载方式为异步加载,我们主要关注XHR下请求,点“XHR”,按F5刷新重新发送请求。这时候发现浏览器已经发送两个请求,第一个请求主要是为了获取一些和博主相关的介绍信息,而第二个请求就是为了获取第一页所有微博的信息,我们重点关注第二个请求。

点“Headers”,可以发现Request URL 、Cookie、Referer等我们需要的信息(Cookie信息这里采用手动获取方式,有效时间为几个小时不等,过期后需要手动重新获取一下), 其中Request URL为 https://m.weibo.cn/api/container/getIndex?type=uid&value=1195054531&containerid=1076031195054531

后面通过观察发现,在这个url末尾加上&page=页数可以控制想要爬取的微博页数。 点“Preview”:

观察返回的json数据,cards下就是一条条微博的信息card。 点开mblog,可以获取详细的微博相关内容:

我们主要需要以下数据: ‘id’:微博编号 ‘text’:微博文本 ‘islongText’:判断该条微博是否为长微博 ‘bmiddle_pic’:判断该微博是否带有图片

点开某条具体微博,来到微博完整内容和评论页面,同理通过观察“Network中请求相关信息,可以发现该页面url为: https://m.weibo.cn/api/comments/show?id=3900009063730800&page=1 其中id后面数字即为我们前面获取的微博编号,page参数可控制微博页数,请求返回json格式数据如下:

其中’data’和’hotdata’分别为评论和热评数据。

实现逻辑

  1. 通过控制page参数获取每页微博的cards数据,其中包含各条微博的详细信息;
  2. 开始遍历每一页微博页,同时遍历每一页的每一个微博,期间进行如下操作:
  3. 判断是否为长微博,如不是获取文本信息,否则进入详细微博内容请求,获取文本信息,将文本信息写入txt文档;
  4. 判断微博是否带有图片,如有通过请求获取图片地址,遍历地址,将其链接写入txt文档,将图片保存到本地,如无图片结束;
  5. 通过微博评论请求,获取评论数据列表,遍历列表获得该微博下每一条评论并保存到txt文档中相应微博内容下; …… 直到遍历完每一条微博。

爬取过程

爬取结果

文件夹中为对应微博图片,txt文档中为爬取的微博文本、评论内容。

以爬取“博物杂志”第3条微博为例,原博内容如下:

Txt文本中微博文本和评论如下:

文件夹中对应图片如下:

相对来说可以比较方便地进行检索和查阅。  

代码实现

# -*- coding:utf-8 -*-
'''
Created on 2018年3月9日

@author: ora_jason
'''
from lxmlimport html
import requests
import json
import re
import os
import time
import urllib.request


class CrawlWeibo:
# 获取指定博主的所有微博cards的list
defgetCards(self, id, page):  # id(字符串类型):博主的用户id;page(整型):微博翻页参数
ii = 0
list_cards = []
while ii < page:
            ii = ii + 1
print('正在爬取第%d页cards' % ii)
url = 'https://m.weibo.cn/api/container/getIndex?type=uid&value=' + id + '&containerid=107603' + id + '&page=' + str(
                ii)
            response = requests.get(url, headers=headers)
ob_json = json.loads(response.text)  # ob_json为dict类型

list_cards.append(ob_json['data']['cards'])  # ob_json['data']['cards']为list类型
time.sleep(2)
print('暂停2秒')  # 爬完一页所有微博的cards后 停顿两秒
return list_cards# 返回所有页的cards

本文分享自微信公众号 - Python中文社区(python-china)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用Python对鹿晗、关晓彤微博进行情感分析

    專 欄 ❈大吉大利小米酱,Python中文社区专栏作者,Python爱好者,顽强地自学中,18线灵魂画手/段子手/脑洞女王。 简书: http://www....

    Python中文社区
  • 微博爬虫开源项目汇总大全

    - [SinaSpider][1] - 基于scrapy和redis的分布式微博爬虫。SinaSpider主要爬取新浪微博的个人信息、微博数据、关注和粉丝。数...

    Python中文社区
  • Python运用蒙特卡洛算法模拟植物生长

    專 欄 ❈ Toby,微信号:drug666123,Python数据科学爱好者,擅长医药统计。国内最大药品数据中心任职,二十多个数据库负责人。 ❈ ? (细胞...

    Python中文社区
  • 微博九岁为何没有衰老迹象?诀窍在于这两个字

    我的第一条微博发布于2009年11月18日,算是微博早期用户,跟微博一起成长了九年。

    罗超频道
  • Python黑科技:利用Python实现微博监控小姐姐动态

    ? 0x00 前言: ? 前几个星期在写一个微博监控系统 可谓是一波三折啊 获取到微博后因为一些字符编码问题 导致心态爆炸开发中断 但是就在昨天发现了另外一个...

    小小科
  • 市值反超Twitter,深度复盘微博如何青出于蓝而胜于蓝?

    今天,曾经被许多人唱衰的微博创造了新的历史:在美国股市前的一个交易日中,微博股价盘中上涨至53.12美元,市值达到113亿美元,一度超越社交媒体始祖Twitte...

    罗超频道
  • 红包营销抢眼台网联动给力,微博鸡年大发得靠这三招

    春节互联网行业最受关注的莫过于两马战,即腾讯与阿里的红包大战。一到大年除夕,微信、QQ和支付宝就纷纷公布了除夕红包数据,可见春节已成为互联网巨头的必争之地。 大...

    罗超频道
  • 上市三周年,二次崛起的微博如何才能跻身巨头之列?

    三年前的今天,新浪微博以代码“WB”登陆纳斯达克。三个多月后,新浪微博曾经的竞争对手之一、也是最强大的竞争对手腾讯微博正式退出市场,微博团队与新闻团队被合二为一...

    罗超频道
  • 太阳底下无隐私:那些年我们做的微博数据挖掘

    新浪微博在2012年-2013年红得发紫,也是移动互联网快速成长的年代。主页君当时就读于北京邮电大学,在实验室老师的指导下,从4G研发转战数据挖掘。从此我们项目...

    华章科技
  • 发财报后股价暴涨25%,微博正在越来越像YouTube

    5月16日晚间,微博在开盘前发布了第一季度财报,这是微博第一次将财报放到了开盘前发布,有人说是因为有晚起习惯的微博CEO王高飞害怕分析师电话会迟到才作出此举。然...

    罗超频道

扫码关注云+社区

领取腾讯云代金券