App下載

DrissionPage:簡(jiǎn)化Web自動(dòng)化與數(shù)據(jù)抓取的強(qiáng)大工具

燭光里的愿 2024-02-23 11:42:07 瀏覽數(shù) (9879)
反饋

DrissionPage是一個(gè)基于Python的網(wǎng)頁自動(dòng)化工具,集成了Selenium和Requests,提供了無縫切換和簡(jiǎn)化的接口,使開發(fā)者在Web自動(dòng)化和數(shù)據(jù)抓取任務(wù)中能夠高效、靈活地操作。無論是渲染JavaScript生成的動(dòng)態(tài)內(nèi)容還是靜態(tài)頁面數(shù)據(jù)抓取,DrissionPage都能輕松勝任。本文將介紹DrissionPage的特點(diǎn)和安裝方法,并提供示例代碼,展示其在會(huì)話模式登錄和頁面數(shù)據(jù)抓取方面的應(yīng)用。

DrissionPage是什么?

DrissionPage是一個(gè)集成了Selenium和Requests的庫,類似 selenuium 的網(wǎng)頁自動(dòng)化工具。這是一個(gè)基于 Python 的網(wǎng)頁自動(dòng)化工具,支持 Chromium 內(nèi)核瀏覽器。它將控制瀏覽器和收發(fā)請(qǐng)求兩大功能合二為一,并提供了統(tǒng)一、簡(jiǎn)潔的接口。無論是需要渲染JavaScript生成的動(dòng)態(tài)內(nèi)容,還是簡(jiǎn)單的靜態(tài)頁面數(shù)據(jù)抓取,DrissionPage都能輕松應(yīng)對(duì)。這個(gè)庫的設(shè)計(jì)哲學(xué)是提高開發(fā)者在Web自動(dòng)化任務(wù)中的工作效率,同時(shí)降低編碼復(fù)雜度。

DrissionPage

特點(diǎn)

  • 無縫切換:DrissionPage 允許開發(fā)者在Selenium的瀏覽器驅(qū)動(dòng)和Requests的會(huì)話之間無縫切換,這意味著您可以在需要渲染頁面時(shí)使用Selenium,而在需要高速數(shù)據(jù)抓取時(shí)使用Requests。
  • 簡(jiǎn)化的接口:通過提供統(tǒng)一的接口,DrissionPage簡(jiǎn)化了Web自動(dòng)化和數(shù)據(jù)抓取的流程。開發(fā)者不需要分別學(xué)習(xí)和使用兩個(gè)庫的復(fù)雜API,從而節(jié)省了學(xué)習(xí)和開發(fā)時(shí)間。
  • 靈活高效:DrissionPage 設(shè)計(jì)考慮到了靈活性和效率,不僅支持動(dòng)態(tài)內(nèi)容的抓取,還能處理大量的數(shù)據(jù)抓取任務(wù)。其性能優(yōu)化和易用性使其成為處理Web自動(dòng)化和數(shù)據(jù)抓取任務(wù)的強(qiáng)大工具。

安裝方法

通過pip安裝DrissionPage,安裝命令如下:

pip install DrissionPage

示例代碼

  • 登錄會(huì)話模式:DrissionPage允許您在Driver模式下進(jìn)行登錄,可以自行替換帳號(hào)密碼來進(jìn)行登錄體驗(yàn):
    from DrissionPage import ChromiumPage
    
    # 創(chuàng)建頁面對(duì)象,并啟動(dòng)或接管瀏覽器
    page = ChromiumPage()
    # 跳轉(zhuǎn)到登錄頁面
    page.get('https://gitee.com/login')
    
    # 定位到賬號(hào)文本框,獲取文本框元素
    ele = page.ele('#user_login')
    # 輸入對(duì)文本框輸入賬號(hào)
    ele.input('您的賬號(hào)')
    # 定位到密碼文本框并輸入密碼
    page.ele('#user_password').input('您的密碼')
    # 點(diǎn)擊登錄按鈕
    page.ele('@value=登 錄').click()
  • 抓取頁面數(shù)據(jù):在任何模式下,DrissionPage都提供了簡(jiǎn)單的方法來抓取和處理頁面數(shù)據(jù):
    from DrissionPage import SessionPage
    
    # 創(chuàng)建頁面對(duì)象
    page = SessionPage()
    
    # 爬取3頁
    for i in range(1, 4):
        # 訪問某一頁的網(wǎng)頁
        page.get(f'https://gitee.com/explore/all?page={i}')
        # 獲取所有開源庫<a>元素列表
        links = page.eles('.title project-namespace-path')
        # 遍歷所有<a>元素
        for link in links:
            # 打印鏈接信息
            print(link.text, link.link)

這兩段代碼展示了如何使用DrissionPage進(jìn)行會(huì)話模式的登錄和頁面數(shù)據(jù)的抓取。這種靈活性和簡(jiǎn)化的接口讓它在Web自動(dòng)化和數(shù)據(jù)抓取領(lǐng)域非常有用。

高級(jí)應(yīng)用

接下來,我們深入一項(xiàng)需要一定開發(fā)經(jīng)驗(yàn)和難度的功能:使用Selenium模式進(jìn)行復(fù)雜的交互操作。

# 首先,我們導(dǎo)入頁面對(duì)象WebPage類。
from DrissionPage import WebPage

# 接下來,我們創(chuàng)建一個(gè)WebPage對(duì)象。
page.get('https://gitee.com/explore')
# 然后控制瀏覽器訪問 gitee。
page('#q').input('DrissionPage')
page('t:button@tx():搜索').click()
page.wait.load_start()

# 抓取交互后的頁面數(shù)據(jù)
# 對(duì)ele元素進(jìn)行模擬點(diǎn)擊,如判斷被遮擋也會(huì)點(diǎn)擊
ele.click()

# 用js方式點(diǎn)擊ele元素,無視遮罩層
ele.click(by_js=True)

# 如元素不被遮擋,用模擬點(diǎn)擊,否則用js點(diǎn)擊
ele.click(by_js=None)

通過這段代碼,您可以在Web模式下執(zhí)行復(fù)雜的頁面交互,如點(diǎn)擊按鈕、填寫表單等操作,并抓取交互后的頁面數(shù)據(jù)。

總結(jié)

DrissionPage是一款強(qiáng)大的網(wǎng)頁自動(dòng)化工具,通過集成Selenium和Requests,它簡(jiǎn)化了Web自動(dòng)化和數(shù)據(jù)抓取的流程,并提供了統(tǒng)一、簡(jiǎn)潔的接口。無論是處理動(dòng)態(tài)內(nèi)容抓取還是簡(jiǎn)單的頁面數(shù)據(jù)獲取,DrissionPage都表現(xiàn)出靈活性和高效性。通過示例代碼,我們展示了DrissionPage在會(huì)話模式登錄和頁面數(shù)據(jù)抓取方面的應(yīng)用,以及如何利用其在Web模式下執(zhí)行復(fù)雜的交互操作。對(duì)于開發(fā)者來說,DrissionPage是一個(gè)值得嘗試的工具,可以提高工作效率并降低編碼復(fù)雜度。


0 人點(diǎn)贊