1. 程式人生 > >python 爬取鬥魚 Ajax動態載入js分頁 使用phontomjs無介面瀏覽器

python 爬取鬥魚 Ajax動態載入js分頁 使用phontomjs無介面瀏覽器

python2.7版本

#coding:utf8
import unittest
from selenium import webdriver
from bs4 import BeautifulSoup as bs

class douyu(unittest.TestCase):
    # 初始化方法,必須是setUp()
    def setUp(self):
        self.driver = webdriver.PhantomJS()

        self.num = 0
        self.count = 0

    # 測試方法必須有test字樣開頭
    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"})
            #主播id
            peoples = soup.find_all("span", {"class": "dy-name ellipsis fl"})

            # zip(names, numbers) 將name和number這兩個列表合併為一個元組 : [(1, 2), (3, 4)...]
            for name, number,people in zip(names, numbers,peoples):
                print u"觀眾人數: -" + number.get_text().strip() + u"-\t房間名: " + name.get_text().strip() + u"-\t主播名: " + people.get_text().strip()
                self.num += 1
                #self.count += int(number.get_text().strip())

            # 如果在頁面原始碼裡找到"下一頁"為隱藏的標籤,就退出迴圈
            if self.driver.page_source.find("shark-pager-disable-next") != -1:
                    break

            # 一直點選下一頁
            self.driver.find_element_by_class_name("shark-pager-next").click()

    # 測試結束執行的方法
    def tearDown(self):
        # 退出PhantomJS()瀏覽器
        print "當前網站直播人數" + str(self.num)
        print "當前網站觀眾人數" + str(self.count)
        self.driver.quit()

if __name__ == "__main__":
    # 啟動測試模組
    unittest.main()

執行完結果: