P0-为什么学习数据采集?为什么是自动化?为什么选择DrissionPage?
在后续将会出一个合集视频,主要就是讲自动化,使用DrissionPage这个工具。
为什么学习数据采集?
大白话
数据就是财富,尤其是现在数据的时代,训练ai大模型最重要的数据。
你想想你去一些文档网站复制不给你复制,下载图片视频还带水印,让你充值vip,这些无一不说明数据就是金钱。
数据采集理论上可以做到,下载音乐,下载图片,还有下载小电影。抢票,自动签到,舆情监测等等很多事情。包括我前两天发了一期视频讲赚钱的,结果一堆机器人在我的评论区评论引流,我平时视频才几百个播放,那期视频硬是让机器人给我干到了几千播放量。他的背后就是爬虫与自动化。具体可以干什么,前面我也有视频讲过,感兴趣可以去看一下。https://www.bilibili.com/video/BV1FXUkYEEUn/
比如说让你根据一个表格里的信息去填写问卷,使用自动化就可以轻松的实现,我前面就有三集视频专门讲哪个填问卷的东西。

但是大家不要只看下理论能实现的就好像看到了葵花宝典一样,觉得学完之后就能天下第一成为武林至尊了。于是赶紧去网上找班报班了,最后学了没有达到自己的预期大喊上当。理论上可以,但是难度不小,并且还有风险。互联网岗位应该就属爬虫岗位最容易进去踩缝纫机了。
Gpt版
学习数据采集有几个关键原因,尤其是在如今的数据驱动世界中:
1. **获取数据**:
数据采集是许多数据分析、机器学习和商业决策的基础。通过采集网络上的公开数据,个人或公司可以分析行业趋势、竞争对手、消费者行为等,从而做出更智能的决策。
2. **自动化提升效率**:
手动采集数据往往既费时又容易出错。自动化数据采集不仅可以大大提升效率,还能确保数据采集的准确性和一致性。特别是在需要定期收集大量数据时,自动化是必不可少的。
3. **节省成本**:
通过自动化流程,数据采集可以不依赖人工,减少了人工成本和错误成本。同时,自动化脚本可以在后台运行,全天候工作,避免了人工监控的需求。
4. **大规模采集**:
手动收集大规模数据几乎不可能,而自动化采集可以一次性从多个来源批量抓取数据,甚至可以同时进行多个任务,提升数据收集的规模和速度。
5. **保持数据最新**:
自动化脚本能够定时运行并采集最新的数据,保持数据库和信息的时效性,尤其对于需要定期更新的信息(如价格、库存、新闻等)尤其重要。
为什么选择自动化?
爬虫分为两种:逆向用协议请求,和自动化。两者的难度是天壤之别。我之前有视频专门讲爬虫学习路线,感兴趣的可以去看一看。
- 定时更新:自动化脚本可以定时运行,确保数据总是最新的,适用于需要定期获取和更新数据的场景。
- 避免人工错误:人工采集数据可能会出错,而自动化采集能够降低人为失误。
- 大规模操作:对于需要抓取大量数据的场景,自动化能够高效、稳定地完成任务。
- 提升工作效率:自动化让数据采集的工作可以在后台独立进行,节省了大量的人工时间和精力。
为什么选择DrissionPage?
好处
有很多语法糖,新手易上手
这些概念说来说去我都有点烦了,后面就愉快的敲代码了。
特征
✅️️ 强大的自研内核
- 可以跨 iframe 查找元素,无需切入切出
- 可同时操作多个标签页,无需切换
- 可处理非open状态的 shadow-root
✅️️ 无处不在的等待
- 等待太少,会导致程序出错,等待太多,又会浪费时间。
- 为了解决这些问题,本库在大量需要等待的部分内置了超时功能,并且可以随时灵活设置,大幅降低程序复杂性。
- 查找元素内置等待。可以为每次查找元素单独设定等待时间。使用灵活。
- 等待下拉列表选项。很多下拉列表使用 js 加载,本库选择下拉列表时,会自动等待列表项出现。
- 等待弹窗。有时预期的 alert 未必立刻出现,本库处理弹窗消息时也可以设置等待。
- 等待元素状态改变。使用wait.ele()方法可等待元素出现、消失、删除等状态。
- 等待页面进入加载状态或加载完成。不仅节省时间,还大幅提高程序稳定性。
- 点击功能也内置等待,如遇元素被遮挡可不断重试点击。
- 设置页面加载时限及加载策略。有时不需要完整加载页面资源,可根据实际需要设置加载策略。
✅️️ 极简的定位语法
本库制定了一套简洁高效的查找元素语法,支持链式操作,支持相对定位。
每次查找内置等待,可以独立设置每次查找超时时间。
同是设置了超时等待的查找,与 selenium 对比一下:
# 使用 selenium:
element = WebDriverWait(driver, 10).until(ec.presence_of_element_located((By.XPATH, '//*[contains(text(), "some text")]')))
# 使用 DrissionPage:
element = tab('some text', timeout=10)✅️️ 无需切入切出的使用方式-
使用过 selenium 的人都知道,selenium 同一时间只能操作一个标签页或需要用switch_to()方法来回切换,相当麻烦。
DrissionPage 则无需这些麻烦的操作,它把每个标签页和都看作独立的对象,可以同时并发操作。
而且可以直接跨多层获取里面的元素,然后直接处理,非常方便。
对比一下,获取 2 层内一个 id 为'div1'的元素:
多标签页同时操作,selenium 无此功能:
tab1 = browser.get_tab(1)
tab2 = browser.get_tab(2)
tab1.get('https://www.baidu.com')
tab2.get('https://www.163.com')✅️️ 高度集成的便利功能
很多操作方法集成了常用功能,如click()中内置by_js参数,可以直接改用 js 方式点击,而无需写独立的 js 语句。
数量太多,不一一阐述,可在使用中体验。
✅️️ 强大的下载功能
DrissionPage 内置一个下载工具,可实现大文件分块多线程下载文件。
并且可以直接读取缓存数据保存图片,而无需控制页面作另存操作。
✅️️ 自动重试连接
在访问网站时,由于网络不稳定可能导致连接异常。本库设置了连接自动重试功能,当网页连接异常,会默认重试 3 次。当然也可以手动设置次数和间隔。
tab.get('****', retry=5, interval=3) # 出错时重试 5 次,每次间隔 3 秒✅️️ 更多便捷的功能
- 可对整个网页截图,包括视口外的部分
- 每次运行程序可以反复使用已经打开的浏览器,无需每次从头运行
- s 模式访问网页时会自动纠正编码,无需手动设置
- s 模式在连接时会自动根据当前域名自动填写Host和Referer属性
- 下载工具支持多种方式处理文件名冲突、自动创建目标路径、断链重试等
- 支持直接获取after和before伪元素的内容
- 上传文件可直接拦截文件选择框并输入路径,无需依靠 GUI 或查找元素输入