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/