爬虫之路——Day4

原创 2016年08月31日 14:31:42
最近闲着没事想统计一下目前很火的直播网站的观众数量究竟是多少,所以通过爬虫爬取了斗鱼(douyu.com/directory/all)的观众数量。首先可以通过网页源代码获取此时直播的页数,之后利用正则表达式取出主播名字以及对应主播的观众数量,存入数据库,接着再对每页都进行相同的操作,并且每间隔10分钟就统计一次,由此来获得人数随着时间变化的关系。
下图是某一时间得到的直播情况的一部分。


将两天得到的数据做成表:

两条竖线分别代表两天的零点,由这段图像可以看出两天的走向大致相同,大约在9、10点钟时达到最高点,接着持续下降,在第二天的6点左右达到最低点,8月28日(周日)的最高观看人数大约为两千万左右,周一的最高观看人数约为一千七百万左右,最低点都大概为一百四十万左右。不过这些人数肯定含有很大的水分,但是具体的趋势应该差不多。两条竖线分别代表两天的零点,由这段图像可以看出两天的走向大致相同,大约在9、10点钟时达到最高点,接着持续下降,在第二天的6点左右达到最低点,8月28日(周日)的最高观看人数大约为两千万左右,周一的最高观看人数约为一千七百万左右,最低点都大概为一百四十万左右。不过这些人数肯定含有很大的水分,但是具体的趋势应该差不多。

代码如下,由于初学所以代码很不规范,如果有人觉得有问题的话还请指正
import requests
import re
import pymongo
import time

ISOTIMEFORMAT='%Y-%m-%d %X'
connection = pymongo.MongoClient()
att = connection.douyu

while(True):

    time_now = time.strftime(ISOTIMEFORMAT, time.localtime(time.time()))
    if(not((time_now.endswith('0:00')) or (time_now.endswith('0:01')) or (time_now.endswith('0:02')) or (time_now.endswith('0:03')) or (time_now.endswith('0:04')) or (time_now.endswith('0:05')) or (time_now.endswith('0:06')))):
        continue
		
    post_info = att[time_now]

    total = []
    url = 'http://www.douyu.com/directory/all?page=' + str(1) + '&isAjax=0'
    try:
        response = requests.get(url)
        data = response.text
        pages = re.findall('count: "(.*?)"', data)
        contents = re.findall('<span class="dy-name ellipsis fl">(.*?)</span>[\s]*?<span class="dy-num fr">(.*?)</span>', data)

        for content in contents:
            post_info.insert({'主播名字': content[0], '观看人数': content[1]})


        for i in range(2, eval(pages[0])):  # 防止在运行到最后一页的时候所播的人数恰好减少一页以至于又重新redirect到第一页
                                            #  也就是说最后一页的主播将不会被遍历到
            url = 'http://www.douyu.com/directory/all?page=' + str(i) + '&isAjax=0'
            response = requests.get(url)
            data = response.text
            contents = re.findall('<span class="dy-name ellipsis fl">(.*?)</span>[\s]*?<span class="dy-num fr">(.*?)</span>', data)
            for content in contents:
                post_info.insert({'主播名字': content[0], '观看人数': content[1]})

        time.sleep(500) #每10分钟运行一次,但运行时发现如果sleep(600)每次都会比10分钟长,所以就sleep(500)之后接着循环了,其实560估计也可以<pre name="code" class="python">time.sleep(500)




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

爬虫之路——DAY2

python正则表达式的一点问题
  • xwcqqq
  • xwcqqq
  • 2016年06月27日 20:27
  • 50

12天学好C语言——记录我的C语言学习之路(Day 4)

12天学好C语言——记录我的C语言学习之路 Day 4: 首先来看一段程序: //输出下面4*5的矩阵 /* 1  2  3   4   5 2  4  6   8   10 3  6  9  ...

python+selenium自动化测试之路Day4之pycharm的使用详解

前言         在写脚本之前,先要找个顺手的写脚本工具。python是一门解释性编程语言,所以一般把写python的工具叫解释器。写python脚本的工具很多,小编这里就不一一列举的,只要...

[Python 爬虫之路1] 爬取糗事百科(requests,bs4)

需要打开,收藏的网站: 糗事百科 bs4中文文档 requsts中文文档 # 目标: # 1.嗅事百科 24小时 中的段子 # 2.过滤有图的段子 # 4.每次点击回车则显示一条笑话...

12天学好C语言——记录我的C语言学习之路(Day 9)

12天学好C语言——记录我的C语言学习之路 Day 9: 函数部分告一段落,但是我们并不是把函数完全放下,因为函数无处不在,我们今后的程序仍然会大量运用到函数 //转入指针部分的学习,了解指针是...

12天学好C语言——记录我的C语言学习之路(Day 8)

12天学好C语言——记录我的C语言学习之路 Day 8: 从今天开始,我们获得了C语言中很有力的一个工具,那就是函数。函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用...

12天学好C语言——记录我的C语言学习之路(Day 6)

12天学好C语言——记录我的C语言学习之路 Day 6: 今天,我们要开始学习数组了。 //①数组部分,数组的大小不能够动态定义。如下: //int n;   scanf("%d,&n"); i...

12天学好C语言——记录我的C语言学习之路(Day 5)

12天学好C语言——记录我的C语言学习之路 Day 5: 第五天的学习开始了,今天我们主要对几个程序进行编写,让自己充分的熟练编程语言,大量的题目会让自己变的精炼。以一个程序(program 5....

转载——Python 之路 Day5 - 常用模块学习

本节大纲: 模块介绍time &datetime模块randomossysshutiljson & picleshelvexml处理yaml处理configparserhashlibsubpro...

12天学好C语言——记录我的C语言学习之路(Day 1)

12天学好C语言——记录我的C语言学习之路 Day 1: 刚刚入门C语言,那么肯定要先把什么是C语言和大家讲清楚,那么大家看下面一段程序(program  1.1): /*//program 1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:爬虫之路——Day4
举报原因:
原因补充:

(最多只允许输入30个字)