爬取斗鱼直播平台的所有房间信息

1.首先确定数据的位置

每个房间的数据都在id=live-list-contentbox的ul中

2.

实现翻页和控制程序结束

selenium中通过点击就可以实现翻页,观察存在下一页和不存在下一页时候标签的变化

存在下一页时:

不存在下一页时:

 具体代码如下:

```

import json
import time
from selenium import webdriver


class DouYu(object):
    def __init__(self):
        self.start_url = 'https://www.douyu.com/directory/all'
        self.driver = webdriver.Chrome()
        self.index=1

    def get_content_list(self):  # 提取数据
        li_list = self.driver.find_elements_by_xpath('//ul[@id="live-list-contentbox"]/li')
        content_list = []
        for li in li_list:
            item = {}
            item['title'] = li.find_element_by_xpath('./a').get_attribute('title')
            item['anchor'] = li.find_element_by_xpath('.//span[@class="dy-name ellipsis fl"]').text
            item['watch_num'] = li.find_element_by_xpath('.//span[@class="dy-num fr"]').text
            item['image'] = li.find_element_by_xpath('.//img[@class="JS_listthumb"]').get_attribute('src')
            item['category'] = li.find_element_by_xpath('.//span[@class="tag ellipsis"]').text
            print(item)
            content_list.append(item)
        # 提取下一页元素
        next_url = self.driver.find_elements_by_xpath('.//a[@class="shark-pager-next"]')
        next_url = next_url[0] if len(next_url) > 0 else None
        return content_list, next_url

    def save_content_list(self, content_list):
        json_str = json.dumps(content_list, ensure_ascii=False, indent=4)
        with open('./douyu/douyu_{}'.format(str(self.index)) + '页.json', 'w', encoding='utf-8') as f:
            f.write(json_str)
        self.index += 1

    def run(self):  # 实现主要逻辑
        # start_url
        # 发送请求,获取响应
        self.driver.get(self.start_url)

        # 提取数据
        content_list, next_url = self.get_content_list()
        # 保存
        self.save_content_list(content_list)
        # 下一页数据的提取
        while next_url is not None:
            next_url.click()# 页面没有完全加载完
            time.sleep(5)
            content_list, next_url = self.get_content_list()
            # 保存
            self.save_content_list(content_list)

if __name__ == '__main__':
    douyu=DouYu()
    douyu.run()

```

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值