爬虫之路——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)




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

每日一题---day4

基础题: 1、判断两个链表是否相交,若相交,求交点(假设链表不带环) 思路: 代码: ListNode* Intersect(ListNode* l1,ListNode* l2) {...
  • qq_38117478
  • qq_38117478
  • 2018年01月23日 11:59
  • 12

python学习之路Day4

python学习之路Day4组织列表1.使用sort()方法对列表进行永久性排序nums = ['abc','cab','bca','edc','dab'] nums.sort() #对nums按字母...
  • liuzhuo2014
  • liuzhuo2014
  • 2017年08月21日 21:39
  • 57

python自动化之路-day4

笔记补充: 元组就是一个只读列表。 字典:去重,无序。 utf-8 中文占3字节。 只有unicode 有encode方法。 函数按照关键参数或者位置参数,不能重合使用。 局部函数中用gl...
  • zongyimin
  • zongyimin
  • 2016年11月04日 12:03
  • 368

C++学习之路 day4

全帝的C++学习之路~
  • zay_myxq
  • zay_myxq
  • 2017年08月25日 14:15
  • 53

Mysql学习之路——day4

连接查询之实例 首先,我们先创建这样的两张表 mysql> create table m( -> matchid int primary key auto_incremen...
  • w1373199
  • w1373199
  • 2015年05月22日 13:34
  • 541

一个前端攻城狮的全栈之路第一弹:nodejs实现一个简易的爬虫

敬请期待。。。
  • Take_Dream_as_Horse
  • Take_Dream_as_Horse
  • 2017年06月07日 18:08
  • 509

[YZOJ1062][NOIP福建夏令营]记分牌

[YZOJ1062][NOIP福建夏令营]记分牌
  • xiaoyao24256
  • xiaoyao24256
  • 2017年06月17日 16:42
  • 391

爬虫之路

先把原理走一遍,用些基本库。得到网页数据,解析网页,存取数据。 先写到这,晚上回去补充...
  • zhangzuyong1994
  • zhangzuyong1994
  • 2017年05月17日 15:25
  • 52

python爬虫,爬取虎扑网新闻

以前写过的代码过一段时间就会忘记,需要按时复习 最近闲来无事,写了一个简单的爬虫程序,无奈知识遗忘太快,竟然花了我好长时间 女票喜欢库里,但无奈库里新闻太少,只好爬一波勇士队消息 【女票是不会喜...
  • MakeRoomFor1
  • MakeRoomFor1
  • 2017年09月16日 22:48
  • 223

Python学习day4作业-员工信息表

Python学习day4作业@(学习)[python]Python学习day4作业 day4作业员工信息表 程序说明 基本流程图 程序代码 程序测试...
  • ygqygq2
  • ygqygq2
  • 2016年12月19日 22:58
  • 1401
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:爬虫之路——Day4
举报原因:
原因补充:

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