沐印
848 字
4 分钟
Python 爬虫之 DrissionPage

DrissionPage 是什么#

DrissionPage 是一个基于 python 的网页自动化工具。 它既能控制浏览器,也能收发数据包,还能把两者合而为一。 可兼顾浏览器自动化的便利性和 requests 的高效率。 它功能强大,内置无数人性化设计和便捷功能。 它的语法简洁而优雅,代码量少,对新手友好。

用 requests 做数据采集面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高,开发效率不高。使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。

因此,这个库设计初衷,是将它们合而为一,同时实现“写得快”和“跑得快”。能够在不同需要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。
除了合并两者,本库还以网页为单位封装了常用功能,提供非常简便的操作和语句,使用户可减少考虑细节,专注功能实现。 以简单的方式实现强大的功能,使代码更优雅。

以前的版本是对 selenium 进行重新封装实现的。从 3.0 开始,作者另起炉灶,对底层进行了重新开发,摆脱对 selenium 的依赖,增强了功能,提升了运行效率。

示例代码#

from DrissionPage import ChromiumPage

# 创建页面对象,并启动或接管浏览器
page = ChromiumPage()
# 跳转到登录页面
page.get('https://gitee.com/login')

# 定位到账号文本框,获取文本框元素
ele = page.ele('#user_login')
# 输入对文本框输入账号
ele.input('您的账号')
# 定位到密码文本框并输入密码
page.ele('#user_password').input('您的密码')
# 点击登录按钮
page.ele('@value=登 录').click()

应用实例#

淘宝商品截图#

# 部分代码
page = ChromiumPage(co)
page.get(img_url,retry=1, interval=1, timeout=1.5)
                
img = page('tag:img')
img.get_screenshot(path='./', name='temp_img.jpg')

未来工厂订单数据爬取#

from DrissionPage import SessionPage, SessionOptions # pip install DrissionPage
from DrissionPage import ChromiumPage
from DrissionPage import ChromiumOptions
import re
import time

co = ChromiumOptions(read_file=False)  # 不读取文件方式新建配置对象

co.set_browser_path(r'C:\Program Files\Google\Chrome\Application\chrome.exe')  # 设置浏览器路径
# co.set_argument('--headless')  # 设置无头模式 隐藏浏览器界面
# 设置配置文件路径
co.set_user_data_path(r'C:\Users\weiek\AppData\Local\Google\Chrome\User Data')


url_base = "https://www.wenext.cn/index.php?route=account/order&filter_time=6&page="

page = ChromiumPage(co)


# cp = ChromiumPage(co)

for i in range(1, 20):
    print(i)
    url = url_base + str(i)
    page.get(url)
    # 等待页面加载完成
    page.wait.doc_loaded()
    # 从 page.html 正则匹配订单号 订单编号 86027961
    result_num = re.findall(r'订单编号 (\d+)', page.html)
    # print(result_num)
    try:
        for i in result_num:
            page.get('https://www.wenext.cn/index.php?route=account/order/info&order_id=' + i)
            page.wait.doc_loaded()
            # print(page.html)
            # 正则匹配订单金额 余额(158.00) 余额(158)
            result_money = re.findall(r'余额\((.*?)\)', page.html)[0]
            print(result_money)
            # time.sleep(10)
            # 正则匹预计在2024-03-17前发货
            result_time1 = re.findall(r'预计在(.*?)前发货', page.html)[0].replace('23:00:00', ' ')
            print(result_time1)

            # 正则匹配                   <td class="order-body-time">2024-03-10</td>
    # <td class="order-body-time">2024-03-10</td>
    # <td class="order-body-time">已发货,待签收</td>
            result_time2_list = re.findall(r'<td class="order-body-time">(.*?)</td>', page.html, re.S)
            result_time2 = '0'
            for j in result_time2_list:
                if j == '已发货,待签收':
                    # 获取索引
                    index = result_time2_list.index(j)
                    # 获取发货时间
                    result_time2 = result_time2_list[index - 1]
            if result_time2 != '0':
                with open('wenext.txt', 'a') as f: 
                    # 写入文件 订单号 订单金额 预计发货时间  实际发货时间
                    f.write(i + '	' + result_money + '	' + result_time1 + '	' + result_time2 + '    '+'\n')
            print(result_time2)
            # time.sleep(1)
    except:
        with open('wenexterr.txt', 'a') as f: 
            f.write(i + '	' + 'error' + '	' + 'error' + '	' + 'error' + '    '+'\n')
Python 爬虫之 DrissionPage
https://f.undf.top/posts/post/code/py/python-爬虫之-drissionpage/
作者
沐印
发布于
2024-03-15
许可协议
CC BY-NC-SA 4.0