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 DrissionPagefrom DrissionPage import ChromiumPagefrom DrissionPage import ChromiumOptionsimport reimport 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://fuwari.vercel.app/posts/post/code/py/python-爬虫之-drissionpage/     
  
 