专栏首页有趣的Python和你Python有趣|微博榜单爬虫,尽知天下事

Python有趣|微博榜单爬虫,尽知天下事

项目背景

大家对于网页的数据爬虫了解的已经很多了,这次爬取APP端的数据。之前我也讲解过APP爬虫,但是没有讲解过Fiddler的配置和使用。这次以微博榜单为案例,介绍APP爬虫流程和数据的可视化(数据为2019年2月28号采集)。整个项目流程如下图所示:

环境配置

首先,在网上下载Fiddler软件,这个和普通的软件安装一样,这里就不详细讲解了。

接着,我们打开Fiddler软件,进行配置,打开tools-options,进行如下的设置。

  • 选中"Decrpt HTTPS traffic", Fiddler就可以截获HTTPS请求;
  • 选中"Allow remote computers to connect". 是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来。

设置完记得重启软件~

为了让Fiddler截取手机的包,需要让手机和电脑在同一个ip下,在电脑端的cmd中输入:ipconfig,获取电脑ip地址。

接着打开手机(以IPhone为例),打开wifi,配置代理,这里的代理就是上图我们查询的ip地址,8888为端口号。

最后,在手机浏览器输入http://192.168.0.144:8888,点击下载证书,IPhone最后还需要在设置中信任证书,这样就可以用Fiddler抓取手机的包啦。

找包

我们打开Fiddler找包,发现这是一个POST请求,下面就是请求的参数,max_id改变就是换页。

爬虫代码

这样,我们就可以写出完整代码了。

import requests
import json
import csv
import time

fp = open('weibo.csv','w',newline='',encoding='utf-8')
writer = csv.writer(fp)
writer.writerow(['user','location','gender','followers','text','created_time','comments','good'])

url = 'https://api.weibo.cn/2/statuses/unread_hot_timeline?gsid=_2A25xXl6mDeRxGeNM41oV-S_MzDSIHXVQStVurDV6PUJbkdANLVTwkWpNSf8_0kSaOWZtWP9k_mbYuGWoJ6k7Z2E_&sensors_mark=0&wm=3333_2001&i=b9f7194&sensors_is_first_day=false&from=1092093010&b=0&c=iphone&networktype=wifi&skin=default&v_p=71&s=a8064444&v_f=1&sensors_device_id=1962A632-B40D-4337-A4C6-3F9AB979B517&lang=zh_CN&sflag=1&ua=iPhone8,1__weibo__9.2.0__iphone__os12.1.4&ft=11&aid=01AuxGxLabPA7Vzz8ZXBUpkeJqWbJ1woycR3lFBdLhoxgQC1I.&cum=21171544'

headers = {
    'Host': 'api.weibo.cn',
    'Content-Type':'application/x-www-form-urlencoded; charset=utf-8',
    'User-Agent': 'Weibo/29278 (iPhone; iOS 11.4.1; Scale/2.00)'
}

params = ['max_id={}'.format(str(i)) for i in range(1,16)]

for param in params:
    res = requests.post(url,headers=headers,data=param)
    json_data = json.loads(res.text)
    statuses = json_data['statuses']
    for statuse in statuses:
        user = statuse['user']['name']
        location = statuse['user']['location']
        gender = statuse['user']['gender']
        followers = statuse['user']['followers_count']
        text = statuse['text']
        created_time = statuse['created_at']
        comments = statuse['comments_count']
        good = statuse['attitudes_count']
        print(user,location,gender,followers,text,created_time,comments,good)
        writer.writerow([user,location,gender,followers,text,created_time,comments,good])
    time.sleep(2)
榜单分析

上榜明星,通过对用户昵称计数,看看哪些用户上榜最多。上榜的大多是明星和娱乐号主。

地区分布,上榜的地区分布,可以看出大部分都来自北上广,然后海外用户也是有很多的(有些明星是外籍)。

地区分布情况

性别分布,男性和女性分布较平均,男性更多一些~

榜单发布时间和词云图,可以看出,晚上8点是个高峰期,这个点刚好下班吃瓜。

今日互动

代码下载:https://github.com/panluoluo/crawler-analysis,下载完整代码。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python数据分析之dataframe的groupbygroupby函数highcharts绘图

    罗罗攀
  • 用Python看我的2018

    2018余额已不到两天,2018初的flag完成了几个?今天我利用Python爬虫和数据分析技术,分析我的2018年文章分享情况。

    罗罗攀
  • Python爬虫之Xpath学习问题解决用xpath方法爬取豆瓣图书top250分析总结

    罗罗攀
  • 让测试数据“时间穿梭”

    最近小编在项目新版本的测试时发现,因项目需求,代码中很多触发器和校验都是与时间相关的,虽然在单元测试层面我们可以直接调用一些现成的库实现变量化的时间,但在端对端...

    用户5521279
  • SMP 2018今日开幕,做中国计算社会科学的先锋会议

    AI 科技评论按:由中国中文信息学会社会媒体处理专委会主办、哈尔滨工业大学承办的第七届全国社会媒体处理大会(SMP 2018)于 2018 年 8 月 2 日-...

    AI科技评论
  • 大数据应用之双色球算奖平台总体设计历史数据存储篇

      历史期次的双色球选注数据的存储,采用什么样的格式比较好呢?这需要重点从三个方面考虑,一、文件访问方便吗?二、文件服务器空间够用吗?三、软硬件故障环境下,如何...

    数据饕餮
  • 视频分类模型和数据集板块干货集锦

    基于深度学习的视频分类包含非常多的方法,如3D卷积,双流法,LSTM时序模型等,在有三AI知识星球中有非常多的相关模型解读,案例如下:

    用户1508658
  • java写文件读写操作(IO流,字节流)

    /** * IO流的数据写入和读取 * 在本质上是用的FileReader("c:text.txt")或FileWriter("c:text2.txt")...

    用户3030674
  • 任务系统解析

    任务有主线,日常,也有和活动相连的活动任务,很多项目用得到,例如饿了吗接单,消费等任务

    深雾
  • ffmpeg 去掉片头片尾。。。

    xiny120

扫码关注云+社区

领取腾讯云代金券