将爬虫和Plotly结合基本练习-韩红基金会数据

前言!

前段时间微博上有人举报韩红基金会啥啥啥的,我只想劝那些举报者善良。我的这个小案例就是和韩红慈善基金会有关系。

案例任务!

  1. 爬取韩红基金会信息公示栏下的捐赠项目,捐赠金额。
  2. 对每日各项目基金会受捐情况进行统计,我选择的就是柱状图来展示,以项目为x轴,以捐款金额作为y轴。

案例目的!

  1. 掌握一种反反爬虫的解决方法。
  2. 巩固Plotly绘图的知识。
  3. 通过查看韩红各项目受捐情况,可以大致上分清各项目的重要程度。

案例声明!

  1. 本人对韩红基金会表示尊敬与感谢。
  2. 本文不爬取任何的私人数据,例如姓名,手机号数据,性别,年龄,交易单号等等。

Ajax简介!

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

有事我们在抓取网页中发现一个现象,那就是我们抓取的网页源码和我们在浏览器上看到的内容不一样。开始我们会怀疑是自己的代码有问题,后来我们就会发现这是网站使用了Ajax技术。还有一个表现就是我们在点击下一页的时候我们会发现网页的url没有发生变化。

案例分析!

由于网站使用的是Ajax技术,通过抓包我发现可以通过API接口来获取网站的数据。url中有三个参数需要我们注意一个是开始时间,一个是结束时间,还有一个是页码。在我的案例中我的起始时间是2020-02-20,结束时间是2020-02-27,这个日期还需要加上时分秒。我选择抓取前92页的数据。

在这里插入图片描述

在这里插入图片描述

代码实现!

import requests
import plotly as py
import json
import re
import time
import plotly.graph_objs as go
pyplt=py.offline.plot

def get_data():
    amount={}
    i=1
    while True and i<=92:
        url='http://www.hhax.org/api/trade/trade/jet/selectSimpleByPage?pageNo={}&pageSize=20&payState=1&startDate=2020-2-20%2000:00:00&endDate=2020-2-27%20{}'.format(i,time.strftime("%H:%M:%S"))
        i+=1
        try:
            txt=requests.get(url).text
            print(url)
        except:
            break
        txt=re.sub(' \d{2}:\d{2}:\d{2}','',txt)
        list1=json.loads(txt,encoding='UTF-8')['dataPoints']['list']
        # print(list1)
        for one in list1:
            money=one['amount']
            projectTitle=one['projectTitle']
            if projectTitle not in amount:
                amount[projectTitle]=money
            else:
                amount[projectTitle]+=money
        time.sleep(3)

    return amount

def get_plot(amount):
    x,y=[],[]
    for k,v in amount.items():
        x.append(k)
        y.append(v)
    trace0=[go.Bar(
        x=x,
        y=y,
    )]
    layout=go.Layout(
        title='2020-02-20至2020-02-27日韩红基金会各项目受捐情况',
        xaxis=dict(tickangle=-45)
    )
    fig=go.Figure(data=trace0,layout=layout)
    pyplt(fig,filename='韩红基金会.html')

if __name__ == '__main__':
    amount=get_data()
    get_plot(amount)

效果截图!

在这里插入图片描述
在这里插入图片描述

反思与总结!

  1. 开始时我想做一个复杂的图表,但是就我掌握的数据量和韩红基金会上爬取的数据信息来说,不适合使用复杂的图形。
  2. 对于程序的健壮性做的不够好,考虑的信息不够全面。
  3. 在我想做复杂的数据分析图表的时候,我却发现自己并没有将那些完全战功,自己还需要进行大量的练习。

关注微信公众号,一起学习,一起成长。里面含有学习资源
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值