mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
110 lines
2.7 KiB
Markdown
110 lines
2.7 KiB
Markdown
本节演示一个能够大幅加快浏览器页面数据采集的黑科技。
|
||
|
||
# ✔️ 示例
|
||
|
||
我们找一个比较大的页面来演示,比如网页首页:[https://www.163.com]([https://www.163.com](https://www.163.com))
|
||
|
||
我们数一下这个网页内的`<a>`元素数量:
|
||
|
||
```python
|
||
from DrissionPage import ChromiumPage
|
||
|
||
page = ChromiumPage()
|
||
page.get('https://www.163.com')
|
||
print(len(page('t:body').eles('t:a')
|
||
```
|
||
|
||
**输出:**
|
||
|
||
```console
|
||
1613
|
||
```
|
||
|
||
嗯,数量不少,可以看出效果。
|
||
|
||
加入现在我们的任务是打印所有链接的文本,常规做法是遍历所有元素,然后打印。
|
||
|
||
这里引入一个计时工具,可以标记一段代码运行时间。您也可以用其它方法计时。
|
||
|
||
```python
|
||
from DrissionPage import ChromiumPage
|
||
from TimePinner import Pinner # 导入计时工具
|
||
|
||
pinner = Pinner() # 创建计时器对象
|
||
page = ChromiumPage()
|
||
page.get('https://www.163.com')
|
||
|
||
pinner.pin() # 标记开始记录
|
||
|
||
# 获取所有链接对象并遍历
|
||
links = page('t:body').eles('t:a')
|
||
for lnk in links:
|
||
print(lnk.text)
|
||
|
||
pinner.pin('用时') # 记录并打印时间
|
||
```
|
||
|
||
**输出:**
|
||
|
||
```console
|
||
0.0
|
||
|
||
网络大过年_网易政务_网易网
|
||
网易首页
|
||
...中间省略...
|
||
不良信息举报 Complaint Center
|
||
廉正举报
|
||
用时:4.057772700001806
|
||
```
|
||
|
||
用时 4 秒。
|
||
|
||
现在,我们稍微修改一个小小的地方。
|
||
|
||
把`page('t:body').eles('t:a')`改成`page('t:body').s_eles('t:a')`,然后再执行一次。
|
||
|
||
```python
|
||
from DrissionPage import ChromiumPage
|
||
from TimePinner import Pinner # 导入计时工具
|
||
|
||
pinner = Pinner() # 创建计时器对象
|
||
page = ChromiumPage()
|
||
page.get('https://www.163.com')
|
||
|
||
pinner.pin() # 标记开始记录
|
||
|
||
# 获取所有链接对象并遍历
|
||
links = page('t:body').s_eles('t:a')
|
||
for lnk in links:
|
||
print(lnk.text)
|
||
|
||
pinner.pin('用时') # 记录并打印时间
|
||
```
|
||
|
||
**输出:**
|
||
|
||
```console
|
||
0.0
|
||
|
||
网络大过年_网易政务_网易网
|
||
网易首页
|
||
...中间省略...
|
||
不良信息举报 Complaint Center
|
||
廉正举报
|
||
用时:0.2797656000002462
|
||
```
|
||
|
||
神奇不?原来 4 秒的采集时间现在只需 0.28 秒。
|
||
|
||
---
|
||
|
||
# ✔️ 解读
|
||
|
||
`s_eles()`与`eles()`的区别在于前者会把整个页面转变成一个静态页面,再在其中获取静态元素,因为静态元素是纯文本的,没有各种属性、交互等等消耗资源的部分,所有运行速度非常快。
|
||
|
||
作者曾经采集过一个非常复杂的页面,动态元素用时 30 秒,转静态元素就只要 0.X 秒,加速效果非常明显。
|
||
|
||
我们可以获取页面中内容容器(示例中的`<body>`),把它转换成静态元素,再在其中获取信息。
|
||
|
||
当然,静态元素没有交互功能,但它只是副本,不会影响原来的动态元素。
|