爬取斗鱼房间名,观众人数

 (1)首先分析‘’下一页‘’的class变化,如果不是最后一页的时候,‘下一页’的class如下

(2)如果到了最后一页,‘下一页’变为隐藏,点击不了,class变为如下 

 

(3)找到个房间的名字和观众人数的class 

 

(4)代码 

#!/usr/bin/env python
# -*- coding:utf-8 -*-

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

class douyu(unittest.TestCase):
    # 初始化方法,必须是setUp()
    def setUp(self):
        self.driver = webdriver.Firefox()
        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"})

            # zip(names, numbers) 将name和number这两个列表合并为一个元组 : [(1, 2), (3, 4)...]
            for name, number in zip(names, numbers):
                print u"观众人数: -" + number.get_text().strip() + u"-\t房间名: " + name.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):
        # 退出Firefox()浏览器
        print "当前网站直播人数" + str(self.num)
        print "当前网站观众人数" + str(self.count)
        self.driver.quit()

if __name__ == "__main__":
    # 启动测试模块
    unittest.main()

 

在Python中爬取斗鱼房间标题人数通常需要借助网络爬虫技术,比如使用requests库获取网页内容,然后解析HTML数据,可以利用BeautifulSoup、Scrapy等库辅助。这里简单概述步骤: 1. **安装必要的库**: 首先确保已经安装了`requests`, `beautifulsoup4`, `lxml` (如果BeautifulSoup版本较旧)。你可以通过命令行运行以下命令安装它们: ``` pip install requests beautifulsoup4 lxml ``` 2. **发送HTTP请求**: 使用requests库向斗鱼直播平台的房间页面发送GET请求,获取HTML源码。 ```python import requests from bs4 import BeautifulSoup url = 'https://www.douyu.com/directory/all' # 示例URL,替换为具体的房间列表页 response = requests.get(url) ``` 3. **解析HTML**: 使用BeautifulSoup解析返回的HTML,找到包含房间信息的部分。这通常涉及到查找特定的HTML标签,如`<div>`标签下的`class`或`id`可能对应着房间标题人数。 ```python soup = BeautifulSoup(response.text, 'lxml') room_data = soup.find_all('div', class_='room-item') # 根据实际HTML结构定位元素 ``` 4. **提取信息**: 对每个房间元素,提取出标题(可能是`<a>`标签内的文本)人数(可能隐藏在JavaScript里,需要分析DOM结构或使用类似Selenium的工具获取动态数据)。 ```python titles = [element.find('a').text for element in room_data] popularity_numbers = [] # 这部分可能需要进一步处理,因为斗鱼人数通常是实时变化的 ``` 5. **处理动态数据**: 如果人数显示在JavaScript渲染的内容中,你可能需要使用如Selenium这样的库模拟浏览器行为,获取真实的数据。 注意,网络爬虫操作需遵守网站的Robots协议,并尊重版权用户隐私,频繁大量爬取可能会导致IP被封禁。在实际使用时,最好能结合网站提供的API,如果没有则要确保合法合规地抓取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值