全网最详尽的 DrissionPage 使用教程:用 Python 轻松玩转动态网页

06-01 1112阅读

一、初识 DrissionPage:新时代网页自动化利器

1.1 什么是 DrissionPage?

DrissionPage 是一款基于 Python 的全能型网页自动化工具,创新性地将浏览器自动化与直接 HTTP 请求两大模式完美融合。它不仅具备 Selenium 的动态页面处理能力,还拥有 requests 的高效特性,堪称爬虫开发者的瑞士军刀。

1.2 为什么选择 DrissionPage?

特性传统方案DrissionPage
浏览器驱动依赖需要 ChromeDriver无需额外驱动
动态页面处理仅浏览器模式双模式协同作战
执行效率较慢智能提速 50%+
反爬对抗能力较弱内置指纹伪装
代码复杂度极简 API 设计

二、环境搭建:5 分钟快速上手

2.1 安装核心库

# 安装最新稳定版
pip install DrissionPage
# 升级到最新开发版
pip install DrissionPage --upgrade

2.2 浏览器内核配置(可选)

from DrissionPage import ChromiumOptions
# 自动下载并配置 Chromium
co = ChromiumOptions().auto_install()
# 高级配置示例(无头模式 + 中文语言)
co.set_headless(True)
co.set_lang('zh-CN')

三、浏览器模式实战:动态页面全掌控

3.1 基础操作四部曲

from DrissionPage import ChromiumPage
# 初始化浏览器(可视化模式)
page = ChromiumPage(addr_driver_opts=co)  
# 访问目标网站
page.get('https://www.zhihu.com')
# 定位搜索框并输入关键词
search_box = page.ele('#Popover1-toggle')
search_box.input('人工智能')
# 点击搜索按钮
search_btn = page.ele('xpath://button[@type="submit"]')
search_btn.click()

3.2 元素定位十八般武艺

定位方式示例代码适用场景
CSS 选择器page.ele('#main > .title')精确层级定位
XPathpage.ele('//div[@]')复杂结构定位
文本定位page.ele('text:热门话题')模糊匹配内容
正则表达式page.ele('text:^\\d+月榜单$')模式匹配内容
链式定位page.ele('#header').ele('.logo')分步缩小范围

3.3 智能等待:告别 time.sleep

# 显式等待元素出现(最多10秒)
answer_div = page.wait.ele_loaded('.AnswerItem', timeout=10)
# 等待页面跳转完成
page.wait.load_start()
# 等待 Ajax 加载完成
page.wait.ajax_load('//div[@]')

四、HTTP 模式:闪电战数据抓取

4.1 基础请求示例

from DrissionPage import SessionPage
session = SessionPage()
# 发送 GET 请求
session.get('https://api.zhihu.com/topstory')
# 自动解析 JSON
print(session.json['data'][0]['title'])

4.2 高级请求配置

# 自定义请求头
session.headers = {
    'Referer': 'https://www.zhihu.com',
    'X-Requested-With': 'XMLHttpRequest'
}
# 设置代理
session.proxies = {'http': 'http://127.0.0.1:1080'}
# 文件下载
session.download('https://example.com/report.pdf', './data')

五、双剑合璧:混合模式实战

5.1 动态参数抓取流程

# 浏览器模式获取动态 token
page.get('https://m.weibo.cn')
token = page.ele('meta[name="csrf"]').attr('content')
# 切换到 HTTP 模式批量抓取
session = SessionPage()
for page_num in range(1, 6):
    url = f'https://m.weibo.cn/api/feed?token={token}&page={page_num}'
    session.get(url)
    print(session.json['data'])

5.2 登录态保持技巧

# 浏览器模式登录
page.get('https://passport.zhihu.com/login')
page.ele('#username').input('user@example.com')
page.ele('#password').input('your_password')
page.ele('button[type="submit"]').click()
# 同步 Cookie 到 HTTP 模式
session.cookies = page.cookies
# 使用共享登录态
session.get('https://www.zhihu.com/notifications')

六、反反爬策略大全

6.1 指纹伪装配置

co = ChromiumOptions()
# 修改浏览器指纹
co.set_user_agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')
co.set_platform('Win32')
co.set_resolution(1920, 1080)
# 禁用 WebRTC
co.set_argument('--disable-webrtc')

6.2 流量特征优化

# 随机化操作间隔
import random
page.set.click_options(interval=(0.5, 2)) 
# 模拟人类滚动
page.scroll.to_bottom(step=300, duration=1.5)

七、企业级实战案例:知乎数据采集

7.1 需求分析

  • 目标:采集知乎热榜前 50 问题

  • 字段:标题、热度值、回答数、创建时间

  • 难点:动态加载、登录验证、反爬机制

    7.2 完整实现代码

    from DrissionPage import ChromiumPage
    from time import sleep
    import pandas as pd
    def get_zhihu_hot():
        page = ChromiumPage()
        page.get('https://www.zhihu.com/hot')
        
        results = []
        for _ in range(5):
            items = page.eles('.HotItem')
            for item in items:
                title = item.ele('.HotItem-title').text
                heat = item.ele('.HotItem-metrics').text
                answers = item.ele('text:回答').parent().text.split()[0]
                time = item.ele('.HotItem-time').text
                
                results.append({
                    '标题': title,
                    '热度': heat,
                    '回答数': answers,
                    '发布时间': time
                })
            
            if page.wait.ele_loaded('.Pagination-next', timeout=3):
                page.ele('.Pagination-next').click()
                page.wait.load_start()
            else:
                break
        
        df = pd.DataFrame(results)
        df.to_excel('知乎热榜.xlsx', index=False)
    if __name__ == '__main__':
        get_zhihu_hot()

    八、性能优化指南

    8.1 浏览器模式优化

    # 禁用非必要资源加载
    page.set.load_mode.images(False)  # 关闭图片
    page.set.load_mode.scripts(False) # 关闭 JavaScript
    # 内存优化
    page.set.memory_limit('80%')  # 限制内存使用

    8.2 HTTP 模式优化

    # 启用连接池
    session.set.pool_size(10)
    # 自动重试配置
    session.set.retry_times(3)      # 重试次数
    session.set.retry_interval(5)  # 重试间隔(秒)

    九、常见问题排查

    9.1 元素定位失败

    • ✅ 检查元素是否在 iframe 中

    • ✅ 确认页面加载已完成(使用 wait 方法)

    • ✅ 尝试更换定位策略(优先使用 CSS 选择器)

      9.2 请求被拦截

      • ✅ 检查请求头完整性(特别是 Referer 和 Origin)

      • ✅ 添加随机延迟(0.5-3 秒)

      • ✅ 使用高质量代理 IP


        记住:最好的学习方式就是立刻动手实践!如果遇到任何问题,欢迎在评论区交流讨论。

        全网最详尽的 DrissionPage 使用教程:用 Python 轻松玩转动态网页
        (图片来源网络,侵删)
        全网最详尽的 DrissionPage 使用教程:用 Python 轻松玩转动态网页
        (图片来源网络,侵删)
        全网最详尽的 DrissionPage 使用教程:用 Python 轻松玩转动态网页
        (图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码