import unittest
from selenium import webdriver
from bs4 import BeautifulSoup as bs


class douyu(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.PhantomJS()
        # 用于统计当前直播人数
        self.num = 0
        # 这里没有统计在线观众的人数是因为,斗鱼对不同数量级的观众人数没有用统一的单位,
        # 如"100000",显示为“10万”,而"1000"则显示为“1000”,若需要统计在线观众人数只需要设置一个判断语句
        # 判断爬取的观众人数结果中是否含“万”字,若有则乘1000即可。
    def testDouyu(self):
        self.driver.get("https://www.douyu.com/directory/all")
        #对一个页面下的所有主播进行统计
        while True:
            soup = bs(self.driver.page_source, 'lxml')
            # 房间名
            names = soup.find_all('h3',{"class":"ellipsis"})
            # 观众人数
            numbers = soup.find_all("span",{"class":"dy-num fr"})
            for name,number in zip(names,numbers):
                #因为有的主播会在房间名里面加入大量的空格,所以这里做一个去空格的操作
                name = name.get_text().strip()
                number = number.get_text().strip()
                self.num += 1
                print("房间人数为%s \t 房间名为%s" % (number,name))

            # 判断是否到最后一页,如果到了最后一页则跳出循环
            if self.driver.page_source.find("shark-pager-disable-next")!= -1:
                break
            # 若没到最后一页,则继续用selenium 模拟点击下一页
            self.driver.find_element_by_class_name("shark-pager-next").click()

    def tearDown(self):
        print("当前斗鱼tv在线直播人数为:" + str(self.num))
        # 退出浏览器
        self.driver.quit()


if __name__ ==  "__main__":
    unittest.main()