Skip to content

P0-为什么学习数据采集?为什么是自动化?为什么选择DrissionPage?

在后续将会出一个合集视频,主要就是讲自动化,使用DrissionPage这个工具。

为什么学习数据采集?

大白话

数据就是财富,尤其是现在数据的时代,训练ai大模型最重要的数据。

你想想你去一些文档网站复制不给你复制,下载图片视频还带水印,让你充值vip,这些无一不说明数据就是金钱。

数据采集理论上可以做到,下载音乐,下载图片,还有下载小电影。抢票,自动签到,舆情监测等等很多事情。包括我前两天发了一期视频讲赚钱的,结果一堆机器人在我的评论区评论引流,我平时视频才几百个播放,那期视频硬是让机器人给我干到了几千播放量。他的背后就是爬虫与自动化。具体可以干什么,前面我也有视频讲过,感兴趣可以去看一下。https://www.bilibili.com/video/BV1FXUkYEEUn/

比如说让你根据一个表格里的信息去填写问卷,使用自动化就可以轻松的实现,我前面就有三集视频专门讲哪个填问卷的东西。

image.png

但是大家不要只看下理论能实现的就好像看到了葵花宝典一样,觉得学完之后就能天下第一成为武林至尊了。于是赶紧去网上找班报班了,最后学了没有达到自己的预期大喊上当。理论上可以,但是难度不小,并且还有风险。互联网岗位应该就属爬虫岗位最容易进去踩缝纫机了。

Gpt版

学习数据采集有几个关键原因,尤其是在如今的数据驱动世界中:

1. **获取数据**:

数据采集是许多数据分析、机器学习和商业决策的基础。通过采集网络上的公开数据,个人或公司可以分析行业趋势、竞争对手、消费者行为等,从而做出更智能的决策。

2. **自动化提升效率**:

手动采集数据往往既费时又容易出错。自动化数据采集不仅可以大大提升效率,还能确保数据采集的准确性和一致性。特别是在需要定期收集大量数据时,自动化是必不可少的。

3. **节省成本**:

通过自动化流程,数据采集可以不依赖人工,减少了人工成本和错误成本。同时,自动化脚本可以在后台运行,全天候工作,避免了人工监控的需求。

4. **大规模采集**:

手动收集大规模数据几乎不可能,而自动化采集可以一次性从多个来源批量抓取数据,甚至可以同时进行多个任务,提升数据收集的规模和速度。

5. **保持数据最新**:

自动化脚本能够定时运行并采集最新的数据,保持数据库和信息的时效性,尤其对于需要定期更新的信息(如价格、库存、新闻等)尤其重要。

为什么选择自动化?

爬虫分为两种:逆向用协议请求,和自动化。两者的难度是天壤之别。我之前有视频专门讲爬虫学习路线,感兴趣的可以去看一看。

  • 定时更新:自动化脚本可以定时运行,确保数据总是最新的,适用于需要定期获取和更新数据的场景。
  • 避免人工错误:人工采集数据可能会出错,而自动化采集能够降低人为失误。
  • 大规模操作:对于需要抓取大量数据的场景,自动化能够高效、稳定地完成任务。
  • 提升工作效率:自动化让数据采集的工作可以在后台独立进行,节省了大量的人工时间和精力。

为什么选择DrissionPage?

好处

有很多语法糖,新手易上手

这些概念说来说去我都有点烦了,后面就愉快的敲代码了。

特征

https://drissionpage.cn/features/

✅️️ 强大的自研内核

  • 可以跨 iframe 查找元素,无需切入切出
  • 可同时操作多个标签页,无需切换
  • 可处理非open状态的 shadow-root

✅️️ 无处不在的等待

  • 等待太少,会导致程序出错,等待太多,又会浪费时间。
  • 为了解决这些问题,本库在大量需要等待的部分内置了超时功能,并且可以随时灵活设置,大幅降低程序复杂性。
  • 查找元素内置等待。可以为每次查找元素单独设定等待时间。使用灵活。
  • 等待下拉列表选项。很多下拉列表使用 js 加载,本库选择下拉列表时,会自动等待列表项出现。
  • 等待弹窗。有时预期的 alert 未必立刻出现,本库处理弹窗消息时也可以设置等待。
  • 等待元素状态改变。使用wait.ele()方法可等待元素出现、消失、删除等状态。
  • 等待页面进入加载状态或加载完成。不仅节省时间,还大幅提高程序稳定性。
  • 点击功能也内置等待,如遇元素被遮挡可不断重试点击。
  • 设置页面加载时限及加载策略。有时不需要完整加载页面资源,可根据实际需要设置加载策略。

✅️️ 极简的定位语法

本库制定了一套简洁高效的查找元素语法,支持链式操作,支持相对定位。

每次查找内置等待,可以独立设置每次查找超时时间。

同是设置了超时等待的查找,与 selenium 对比一下:

python
# 使用 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'的元素:

python

多标签页同时操作,selenium 无此功能:

python
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 次。当然也可以手动设置次数和间隔。

python
tab.get('****', retry=5, interval=3)  # 出错时重试 5 次,每次间隔 3 秒

✅️️ 更多便捷的功能

  • 可对整个网页截图,包括视口外的部分
  • 每次运行程序可以反复使用已经打开的浏览器,无需每次从头运行
  • s 模式访问网页时会自动纠正编码,无需手动设置
  • s 模式在连接时会自动根据当前域名自动填写Host和Referer属性
  • 下载工具支持多种方式处理文件名冲突、自动创建目标路径、断链重试等
  • 支持直接获取after和before伪元素的内容
  • 上传文件可直接拦截文件选择框并输入路径,无需依靠 GUI 或查找元素输入

本站收录内容源自互联网,不对其网站内容或交易负责。 | 如有内容侵犯权益,请联系站长删除相关内容!