selenium小项目实践

2023-11-06

1. 斗鱼爬虫

爬取斗鱼直播平台的所有房间信息:游戏直播_全部游戏直播_斗鱼直播

1.1 思路分析:

  1. 数据的位置

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

  2. 实现翻页和控制程序结束

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

    存在下一页时:

    不存在下一页时:

1.2 参考代码

from selenium import webdriver
import time
 
 
class DouYu:
    def __init__(self):
        self.start_url = "https://www.douyu.com/directory/all"
        self.driver = webdriver.Chrome(executable_path='/home/worker/Desktop/driver/chromedriver')
 
    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
            # 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_lsit):#保存
        for content in content_lsit:
            print(content)
 
    def run(self): #实现主要逻辑
        #1. start_url
        #2. 发送请求,获取响应
        self.driver.get(self.start_url)
        #3. 提取数据
        content_list,next_url = self.get_content_list()
        #4.保存
        self.save_content_list(content_list)
        # 5. 下一页数据的提取
        while next_url is not None:
            next_url.click() #页面没有完全加载完,会报错
            time.sleep(3)
            content_list,next_url = self.get_content_list()
            self.save_content_list(content_list)
 
 
if __name__ == '__main__':
    douyu = DouYu()
    douyu.run()

2. 网易云音乐爬虫

完成网易云音乐的所有列表的名字和url地址 地址:网易云音乐

2.1 思路分析:

  1. 确定程序入口的位置

  2. 确定首页数据的位置和url地址

  3. 实现翻页和程序停止的判断

2.2 参考代码

from selenium import webdriver
import time
 
 
class CloudMuisc():
 
    def __init__(self):
        self.start_url = 'http://music.163.com/#/discover/playlist'
        self.driver = webdriver.Chrome(executable_path='/home/worker/Desktop/driver/chromedriver')
 
    def get_content_list(self): #提取数据
        # 切入frame标签
        login_frame = self.driver.find_element_by_id('g_iframe')  # 根据id定位 frame元素
        self.driver.switch_to.frame(login_frame)  # 转向到该frame中
 
        li_list = self.driver.find_elements_by_xpath('//*[@id="m-pl-container"]/li')
        print(len(li_list))
        content_list = []
        for li in li_list:
            item = {}
            item["title"] = li.find_element_by_class_name('msk').get_attribute("title")
            item["href"] = li.find_element_by_xpath('.//a').get_attribute("href")
            # print(item)
            content_list.append(item)
 
        #提取下一页的元素
        page_url_list = self.driver.find_elements_by_xpath('.//div[@class="u-page"]/a')
        next_url = page_url_list[-1] if len(page_url_list)>0 else None
        return content_list, next_url
 
    def save_content_list(self,content_lsit):#保存
        for content in content_lsit:
            print(content)
 
    def run(self): #实现主要逻辑
        #1. start_url
        #2. 发送请求,获取响应
        self.driver.get(self.start_url)
        time.sleep(3)
        #3. 提取数据
        content_list, next_url = self.get_content_list()
        #4.保存
        self.save_content_list(content_list)
        # 5. 下一页数据的提取
        while next_url is not None:
            js = 'window.scrollTo(0,document.body.scrollHeight)'  # js语句:滚动到页面最底部
            self.driver.execute_script(js)  # 执行js的方法
            print(next_url.get_attribute('href'))
            next_url.click() #页面没有完全加载完,会报错
            time.sleep(3)
 
            # 此时在iframe标签中 代码逻辑需要我们先切出
            windows = self.driver.window_handles
            self.driver.switch_to.window(windows[0])
 
            content_list, next_url = self.get_content_list()
            self.save_content_list(content_list)
 
        # 6. 退出driver
        self.driver.quit()
 
 
if __name__ == '__main__':
 
    spider = CloudMuisc()
    spider.run()

selenium小项目实践_ arthur的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

selenium小项目实践 的相关文章

随机推荐

  • SIMPLIS仿真软件1-SIMPLIS介绍

    SIMPLIS仿真软件1 SIMPLIS介绍 导读 SIMPLIS是什么 SIMPLIS的三种分析模式 SIMPLIS的三个关键概念 1 SIMPLIS是时域仿真 2 SIMPLIS的模型都是PWL模型 3 SIMPLIS的特有的POP的作
  • hausman检验_互助问答第302期:关于内生性检验的问题

    http weixin qq com r PTkwKHjEvSXCrTxL92wv 二维码自动识别 关于内生性检验的问题老师 您好 关于内生变量的检验常常相互矛盾 请问应当以哪种检验结果为准呢 1 首先进行豪斯曼检验结果如下 结论拒绝所有解
  • 怎样才能从Java初级程序员成长为一名合格的架构师?

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师 或者说一名合格的架构师应该有怎样的技术知识体系 这不仅仅是一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题 下面 我来详细回答这些问题 希望这篇文章
  • 基于Python和mysql开发的智慧校园答题考试系统(源码+数据库+程序配置说明书+程序使用说明书)

    一 项目简介 本项目是一套基于Python和mysql开发的智慧校园答题考试系统 主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者 包含 项目源码 项目文档 数据库脚本等 该项目附带全部源码可作为毕设使用 项目
  • 搭建自己的searx搜索引擎

    Searx是一个隐私尊重的免费元搜索引擎 它具有以下功能特性 自我托管 默认不使用 Cookie 不跟踪 不分析用户 不收集用户数据 不与第三方共享用户数据 提供安全的加密连接 HTTPS SSL 等 如果您更在意隐私而不是效率 这会是一个
  • PPTP L2TP IPsec

    点对点隧道协议 PPTP PPTP是一个第2层的协议 将PPP数据桢封装在IP数据报内通过IP网络 如Internet传送 PPTP还可用于专用局域网络之间的连接 RFC草案 点对点隧道协议 对PPTP协议进行了说明和介绍 该草案由PPTP
  • springboot+cache缓存下(原理篇)

    原理 1 自动配置类 CacheAutoConfiguration 在idea中使用快捷键ctrl shift n 查找出CacheAutoConfiguration类 看到import中有导入CacheConfigurationImpor
  • S7-1200 PLC的数据类型

    S7 1200 PLC的数据类型 除了基本数据类型之外 还支持一些复杂的数据类型 包括结构数据类型Struct PLC数据类型UDT 数组Array 系统数据类型SDT 硬件数据类型DB ANY 参数数据类型Variant String和C
  • C++11静态断言static_assert

    C 11静态断言static assert 一 运行时断言 二 静态断言的需求 三 静态断言 四 单参数版本的静态断言 一 运行时断言 断言 assertion 是一种编程中常用的手段 在通常情况下 断言就是将一个返回值总是需要为真的判别式
  • vue3 组合式api中 ref 和$parent 的使用

    ref 的使用 vue3中 在 组件中添加一个 component ref xxx 就可以在父组件中得到 子组件的 dom 对象 以及 虚拟的 dom 对象 有了虚拟 dom 我们就可以在父组件中控制子组件的显示了 ref 的使用方法 vu
  • vue中的富文本框的使用(vue-quill-editor)

    一 安装 vue quill editor npm install vue quill editor 二 在main js中引入 import VueQuillEditor from vue quill editor import quil
  • Android Widget:DrawerLayout配合Toolbar的使用及常见问题

    前言 最近在仿写网易云音乐安卓端界面 记录下所遇到的问题及解决方案 DrawerLayout的基础使用 DrawerLayout经常配合NavigationView及Toolbar使用 编写侧滑栏 1 首先添加支持 implementati
  • MapReduce处理csv

    MapReduce处理csv csv是由逗号 来分割的文件 在编写Mapper类的时候需要以 分割成一个个的数据 查看一下csv数据 以上是为了测试做的数据 要处理的结果就是经过mapreduce再原封不动的出来 因为是测试 所以内容不做任
  • 搭建虚拟专网络服务器

    搭建虚拟专网络服务器 准备环境 一台windows server2008R2 服务器 没有安装ad域服务的 IP地址为 192 168 4 92 一台物理机windows 10 家庭版 1 首先安装 网络策略和访问服务 第二步 勾选上远程访
  • 为什么普通人赚钱这么难?普通人的赚钱之路在哪里

    前几天听一个老家的朋友说 辛辛苦苦一整年 发现并没有赚到什么钱 付出与收入不成正比 首先要知道勤奋 努力并不一定就能够赚到钱 像送外卖的 工地上班的 厂里上班的哪个不勤奋 但他们即使非常努力工作一个月 扣除基本开支 也存不了多少钱 那普通人
  • GNS3-GREvpn

    GREvpn 发一下这些日忙的东西 实验拓扑 以R2为界限的左半边运行ospf 各个链路已经ping通 用R7模拟PC1 PC1和R2的f0 0来回链路没问题 右半边同左半边做相应的配置也成功ping通 在R2和R3之间建立vpn隧道 网段
  • 利用Matlab绘制图像中的某一行或者某一列的灰度曲线

    filename C Users Administrator Desktop 透视变换 包含裂缝的整个图片 123 jpg imgData imread filename imshow imgData 该函数可以用来显示已经读入的数据 A
  • 解决AD中pcb原件移动提示绿色报错问题

    有可能以下三个原因之一所导致的 1 不符合DRC规则 比如原件之间距离过近 就是报错 2 右下角ROOM没有删除 右键清楚就可以啦 3 如果以上两个确证都是正常的 还是报错的话 终极解决方案 step1 在pcb界面下 点击design n
  • 主线3.1DeepFM模型论文阅读:DeepFM: A Factorization-Machine based Neural Network for CTR Prediction

    文章目录 一 摘要 二 模型演变和各模型间的对比 1 CTR的任务要求 2 DeepFM模型的引入 3 各模型间的对比 4 DeepFM优势 三 DeepFM模型介绍 1 FM部分 2 Deep部分 一 摘要 对于一个基于CTR预估的推荐系
  • selenium小项目实践

    1 斗鱼爬虫 爬取斗鱼直播平台的所有房间信息 游戏直播 全部游戏直播 斗鱼直播 1 1 思路分析 数据的位置 每个房间的数据都在id live list contentbox的ul中 实现翻页和控制程序结束 selenium中通过点击就可以