python爬虫抓取新浪微博数据

需求分析

抓取 琢磨先生的新浪微博

微博主页

抓取的内容包括:微博发布的时间,正文(仅提取文字),转发数,评论数,点赞数

抓取的内容

数据是怎么加载的

新浪微博的数据是用ajax异步下拉加载的,在chrome的调试模式下可捕捉到相应的请求:

xhr请求

分析这些url的规律:

https://m.weibo.cn/api/container/getIndex?type=uid&value=1665372775&containerid=1076031665372775&page=2
https://m.weibo.cn/api/container/getIndex?type=uid&value=1665372775&containerid=1076031665372775&page=3

发现除了page参数的不同,其他都是一致的

数据的结构分析

json结构分析

返回的json数据结构中,我们需要的是以下字段:

data
  cards
    mblog
      created_at # 发布时间
      text # 正文
      reposts_count # 转发数
      comments_count # 评论数
      attitudes_count # 点赞数

代码实现

首先确保安装了requestspyquery

pip install pyquery
pip install requests

具体代码解析:

import requests
from urllib.parse import urlencode
from pyquery import PyQuery as pq

host = 'm.weibo.cn'
base_url = 'https://%s/api/container/getIndex?' % host
user_agent = 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 wechatdevtools/0.7.0 MicroMessenger/6.3.9 Language/zh_CN webview/0'

headers = {
    'Host': host,
    'Referer': 'https://m.weibo.cn/u/1665372775',
    'User-Agent': user_agent
}


# 按页数抓取数据
def get_single_page(page):
    params = {
        'type': 'uid',
        'value': 1665372775,
        'containerid': 1076031665372775,
        '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('抓取错误', e.args)


# 解析页面返回的json数据
def parse_page(json):
    items = json.get('data').get('cards')
    for item in items:
        item = item.get('mblog')
        if item:
            data = {
                'id': item.get('id'),
                'text': pq(item.get("text")).text(),  # 仅提取内容中的文本
                'attitudes': item.get('attitudes_count'),
                'comments': item.get('comments_count'),
                'reposts': item.get('reposts_count')
            }
            yield data


if __name__ == '__main__':
    for page in range(1, 10):  # 抓取前十页的数据
        json = get_single_page(page)
        results = parse_page(json)
        for result in results:
            print(result)

运行结果

{'id': '4241354777389653', 'text': '【新书预售】\n\n我经常觉得生活就如同唐吉坷德,持一只长矛,去挑战一个个风车。你越是勇敢,你就越是可笑。我们必须正确认识自己,认识自己手里的兵器,也要认清我们要去挑战的是何种存在。\n\n这些风车有爱情,有亲情,有友谊,有远行,有阅读,亦有人性...我把自己跌跌撞撞挑战过的十八个风车,写成了 ...全文', 'attitudes': 646, 'comments': 509, 'reposts': 155}
{'id': '4276572205338096', 'text': '雪橇犬,鸟,鲸鱼,海豹,冰块,人(最后一张)。 格陵兰', 'attitudes': 35, 'comments': 18, 'reposts': 1}
{'id': '4276459473976711', 'text': '北极 微博视频', 'attitudes': 196, 'comments': 39, 'reposts': 12}
{'id': '4276308663690970', 'text': '真好看,魅力十足//@zhj居安:妈呀!太好看了吧!保持的真好,羡慕呀!', 'attitudes': 379, 'comments': 91, 'reposts': 191}
{'id': '4276172055838171', 'text': '在高铁渣男这件事上,我觉得乘警也必须要反思,如果不让座,必须强制执行。如果乘警不作为,个体的乘客如何能解决自己权益收到伤害的情形,难不成都要靠自己的拳头去解决问题?我们有些执法者的问题在于,该有善意的时候心狠,该心狠的时候又充满了没原则的善意。', 'attitudes': 3536, 'comments': 496, 'reposts': 601}
{'id': '4276152610951821', 'text': '恶心至极,不接受那虚伪的道歉,拉入高铁黑名单吧。//@刘力博士://@杨伯溆:太不可思议了//@芮法:唯物史观啊,哪有历史唯物主义史观之说。作者、编辑、刊物都太丢人了//@记录者老K:他还是学法律的 查看图片', 'attitudes': 407, 'comments': 287, 'reposts': 350}

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏域名资讯

w结尾的三声域名zjw.com近50万结拍

在三声母域名中,以字母“w”结尾的域名一般有“XX网”的含义,建站价值高,是众人青睐的品种。今日有消息称:一枚三声域名zjw.com得到了196次出...

26600
来自专栏算法+

MP3 编码解码 附完整c代码

图像方面,已经有stb_image,spot,freeimage等编解码库系列,做得特别赞。

15740
来自专栏飞总聊IT

大数据那些事(11):复活的LSM-Tree--BigTable的系统实现

BigTable是一个非常复杂的系统,发表的论文写得并不是很清楚。所幸Google开源了LevelDB这个Key-Value Store。这个项目的作者是Jef...

43950
来自专栏lonelydawn的前端猿区

echarts 进阶之同心扇形图多级联动

需求分析 前情提要 同心多扇形图,用于表示树形数据结构以及每一层级节点在该层总量中占比。 原始数据结构:  { "name": "师资队伍", "val...

52770
来自专栏FreeBuf

百足之虫死而不僵:Auto456家族木马的死灰复燃

作者 tianjiyun 就在今年上半年,456游戏大厅还是金钱的代名词。一个看起来并不起眼的游戏平台,注册用户却达2000余万,每天获利最高可达100余万。这...

23570
来自专栏大数据挖掘DT机器学习

Python爬取链家网数据:新房楼盘价格分析

本文将详细讲解利用python爬虫收集了链家网800多条公开数据并作简单分析。数据真实性有待考查,本文仅作为数据分析入门者参考。 安装环境 Window 10 ...

53350
来自专栏知晓程序

举报!这里有人,在光天化日之下聚众撸猫

但并不是每个人都有机会成为「猫奴」。这时候,你需要 「吸猫君」 ,来帮你开启「云吸猫」的生活。

9720
来自专栏飞总聊IT

大数据那些事(11):复活的LSM-Tree--BigTable的\b系统实现(修)

修正一些小错误。 BigTable是一个非常复杂的系统,发表的论文面面俱到,但是每个方面都写得并不是很清楚。所幸Google开源了LevelDB这个Key-Va...

40250
来自专栏落影的专栏

Audio Unit录音(播放伴奏+耳返)

前言 相关文章: 使用VideoToolbox硬编码H.264 使用VideoToolbox硬解码H.264 使用AudioToolbox编码AAC 使...

49660
来自专栏练小习的专栏

网站508规范(译)

出处:蓝色理想和玩·艺|中国同步发布 Guide to the Section 508 Standards for Electronic and Informa...

20150

扫码关注云+社区

领取腾讯云代金券