selenium爬取斗鱼的房间信息

selenium爬取斗鱼的房间信息

#!usr/bin/envpython
# -*-coding:utf-8_*-
"""
@author:86135
@file:douyu.py
@time:2020/10/05
@desc:
格式化代码:Ctrl+Alt+L
运行代码:Ctrl+Shift+F10
"""
from selenium import webdriver
import time

# 面向对象的方法来写更简洁。
class douyuSpider():
    def __init__(self):
        self.startUrl = 'https://www.douyu.com/directory/all'
        # 配置webdriver,不展示浏览器动作
        options = webdriver.ChromeOptions()
        options.add_argument('--headless')
        # 实例化driver
        self.driver = webdriver.Chrome(chrome_options=options)

    def parse(self):
        #等待页面加载
        time.sleep(5)
        # 页面模拟滑动
        self.roll()
        # 找到对应的li标签,返回一个列表
        li_list = self.driver.find_elements_by_xpath("//*[@id='listAll']/section[2]/div[2]/ul/li")
        # 定义一个列表,用来保存页面中的数据
        content_list = []
        # 遍历li标签,提取每一个标签(房间)的信息
        for li in li_list:
            item = {
    
    }
            # 信息可以自定义,这里只是做个例子
            item["cate"] = li.find_element_by_xpath(".//span[@class = 'DyListCover-zone']").text
            item["name"] = li.find_element_by_xpath(".//div[@class='DyListCover-userName']").text
            print(item)
            # 将信息追加到列表中
            content_list.append(item)
        # 找到下一页的xpath,用elements。返回别表的形式,用来判断是否有下一页
        next_url = self.driver.find_elements_by_xpath("//li[@class=' dy-Pagination-next']/span")
        # 控制台打印用来检测一下
        print(len(next_url))
        # 判断是否有下一页按钮,没有返回None值
        next_url = next_url[0] if len(next_url)>0 else None
        # 方法的返回值
        return content_list, next_url
    # 保存的方法,略。。。
    def save_content(self, content_list):
        pass
    # 模拟页面滑动,JS语法
    def roll(self):
        for x in range(1,11,2):
            time.sleep(0.5)
            j = x /10
            js = "document.documentElement.scrollTop = document.documentElement.scrollHeight * {}".format(j)
            self.driver.execute_script(js)
    # 实现主要逻辑
    def run(self):
        # 获取起始网页
        self.driver.get(self.startUrl)
        # 解析网页数据
        content_list, next_url = self.parse()
        # 保存数据
        self.save_content(content_list)
        # 判断是否有下一页,进行循环
        while next_url is not None:
            next_url.click()            
            content_list, next_url = self.parse()
            self.save_content(content_list)
        # 没有下一页则推出程序    
        else:self.driver.quit()
# main方法,程序的入口
if __name__ == '__main__':
    douyu = douyuSpider()
    douyu.run()

猜你喜欢

转载自blog.csdn.net/weixin_44429965/article/details/108948131