PythonPuppeteer實現Web自動化爬蟲的秘訣

一、PythonPuppeteer是什麼

PythonPuppeteer是一個基於Python語言和Google Chrome Headless的無界面瀏覽器的庫,可以用來實現Web自動化操作和爬蟲。它提供了對Chrome Headless的完整控制,使用它可以對頁面進行無人值守的操作,如點擊、填寫表單、截屏等,同時也可以模擬真實瀏覽器行為進行自動化爬蟲。

其底層是Google Chrome Headless,因此支持標準的Web技術和API,例如JavaScript,CSS Selectors等。另外,PythonPuppeteer使用async/await實現非同步操作,使得程序更具可讀性和易於維護。

安裝PythonPuppeteer可以使用pip命令:

pip install pyppeteer

二、使用PythonPuppeteer實現Web自動化

實現Web自動化操作,需要使用PythonPuppeteer中的pyppeteer庫中的launch方法來創建一個Page對象,進而使用Page對象的方法進行操作。

1、實例化Page對象

創建Page對象有兩種方式,一種是從browser中新建一個Page對象,另一種是從已存在的Page對象中創建一個新的Page對象。這裡我們以從browser中新建一個Page對象為例。

// 引入庫
import asyncio
from pyppeteer import launch

async def main():
    # 創建browser對象
    browser = await launch()
    # 創建Page對象
    page = await browser.newPage()
    # 使用Page對象的方法進行操作
    await page.goto('https://www.example.com')
    # 關閉browser
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

2、使用Page對象進行操作

在獲取到Page對象之後,我們可以使用Page對象的方法進行自動化操作。例如,我們可以使用goto方法訪問某個網址,使用waitForSelector方法等待某個節點載入完成。

async def main():
    # 創建browser和Page對象,訪問網址
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://www.example.com')
    # 等待#example節點載入完成
    await page.waitForSelector('#example')
    # 點擊#example節點
    await page.click('#example')
    # 填寫表單輸入框
    await page.type('input[name="username"]', 'username')
    # 提交表單
    await page.click('#submit')
    # 關閉browser
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

三、使用PythonPuppeteer實現Web爬蟲

除了可以自動化操作Web頁面外,PythonPuppeteer還可以作為一個Python爬蟲的工具,用於解析爬取到的頁面,獲取所需的數據。下面將會通過一個實例來說明如何使用PythonPuppeteer實現一個簡單的Web爬蟲。

1、實例背景

我們希望爬取Python官網(https://www.python.org/)上的新聞,獲取新聞的標題、發布時間和詳情頁鏈接。

2、實現步驟

STEP 1:解析新聞列表頁

首先,我們需要使用Page對象訪問Python官網的新聞列表頁:https://www.python.org/blogs/。然後,使用Page對象的方法獲取新聞列表的節點,對節點進行解析,獲取每篇新聞的標題、發布時間和詳情頁鏈接。

async def main():
    # 創建browser和Page對象,訪問新聞列表頁
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://www.python.org/blogs/')
    # 解析新聞列表
    articles = await page.querySelectorAll('.blog-widget li')
    news_list = []
    for article in articles:
        news = {}
        # 獲取每篇新聞的標題、發布時間和詳情頁鏈接
        news['title'] = await article.querySelectorEval('.listing-item__title a', 'node => node.innerText')
        news['pub_date'] = await article.querySelectorEval('.listing-item__date', 'node => node.innerText')
        news['url'] = await article.querySelectorEval('.listing-item__title a', 'node => node.href')
        # 加入新聞列表
        news_list.append(news)
    # 關閉browser
    await browser.close()
    return news_list

news_list = asyncio.get_event_loop().run_until_complete(main())

STEP 2:解析新聞詳情頁

獲取到新聞列表之後,我們需要對每篇新聞的詳情頁進行爬取,並解析出新聞的內容。在Python官網上,每篇新聞的詳情頁URL的格式為https://www.python.org/blogs/YYYY/MM/DD/title/,其中YYYY表示年份、MM表示月份、DD表示日期、title表示新聞標題。因此,我們可以通過拼接URL的方式訪問每篇新聞的詳情頁。

async def get_article_info(url):
    # 創建browser和Page對象,訪問新聞詳情頁
    browser = await launch()
    page = await browser.newPage()
    await page.goto(url)
    # 獲取文章標題和內容
    title = await page.querySelectorEval('.document-title', 'node => node.innerText')
    content_raw = await page.querySelectorEval('.document-content', 'node => node.innerHTML')
    # 解析內容
    content = html.unescape(content_raw)
    # 關閉browser
    await browser.close()
    return {'title': title, 'content': content}

async def main():
    # 解析新聞列表
    news_list = await get_news_list()
    # 對每篇新聞的詳情頁進行解析
    for news in news_list:
        article_info = await get_article_info(news['url'])
        news['content'] = article_info['content']
    return news_list

news_list = asyncio.get_event_loop().run_until_complete(main())

3、完整代碼

// 引入庫
import asyncio
import html
from pyppeteer import launch

async def get_news_list():
    # 創建browser和Page對象,訪問新聞列表頁
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://www.python.org/blogs/')
    # 解析新聞列表
    articles = await page.querySelectorAll('.blog-widget li')
    news_list = []
    for article in articles:
        news = {}
        # 獲取每篇新聞的標題、發布時間和詳情頁鏈接
        news['title'] = await article.querySelectorEval('.listing-item__title a', 'node => node.innerText')
        news['pub_date'] = await article.querySelectorEval('.listing-item__date', 'node => node.innerText')
        news['url'] = await article.querySelectorEval('.listing-item__title a', 'node => node.href')
        # 加入新聞列表
        news_list.append(news)
    # 關閉browser
    await browser.close()
    return news_list

async def get_article_info(url):
    # 創建browser和Page對象,訪問新聞詳情頁
    browser = await launch()
    page = await browser.newPage()
    await page.goto(url)
    # 獲取文章標題和內容
    title = await page.querySelectorEval('.document-title', 'node => node.innerText')
    content_raw = await page.querySelectorEval('.document-content', 'node => node.innerHTML')
    # 解析內容
    content = html.unescape(content_raw)
    # 關閉browser
    await browser.close()
    return {'title': title, 'content': content}

async def main():
    # 解析新聞列表
    news_list = await get_news_list()
    # 對每篇新聞的詳情頁進行解析
    for news in news_list:
        article_info = await get_article_info(news['url'])
        news['content'] = article_info['content']
    return news_list

news_list = asyncio.get_event_loop().run_until_complete(main())

四、總結

PythonPuppeteer是一個強大的Web自動化工具和爬蟲工具,可以使用它來實現無人值守的自動化操作和高效的Web爬取。本文通過實例詳細講解了使用PythonPuppeteer實現Web自動化操作和爬蟲的步驟和方法,希望能夠幫助大家更好地應用PythonPuppeteer來解決實際問題。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239066.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:14
下一篇 2024-12-12 12:14

相關推薦

  • Python爬蟲可以爬哪些網站

    Python是被廣泛運用於數據處理和分析領域的編程語言之一。它具有易用性、靈活性和成本效益高等特點,因此越來越多的人開始使用它進行網站爬取。本文將從多個方面詳細闡述,Python爬…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • Python Web開發第三方庫

    本文將介紹Python Web開發中的第三方庫,包括但不限於Flask、Django、Bottle等,並討論它們的優缺點和應用場景。 一、Flask Flask是一款輕量級的Web…

    編程 2025-04-29
  • 使用Selenium爬蟲實現數據採集

    本文將詳細闡述如何使用Selenium爬蟲實現數據採集,包括Selenium的基本用法,Selenium + Beautiful Soup庫的用法以及常見問題的解決方案。如果您是初…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟體開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • Python爬蟲亂碼問題

    在網路爬蟲中,經常會遇到中文亂碼問題。雖然Python自帶了編碼轉換功能,但有時候會出現一些比較奇怪的情況。本文章將從多個方面對Python爬蟲亂碼問題進行詳細的闡述,並給出對應的…

    編程 2025-04-29
  • Python爬蟲文檔報告

    本文將從多個方面介紹Python爬蟲文檔的相關內容,包括:爬蟲基礎知識、爬蟲框架及常用庫、爬蟲實戰等。 一、爬蟲基礎知識 1、爬蟲的定義: 爬蟲是一種自動化程序,通過模擬人的行為在…

    編程 2025-04-28
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • Python爬蟲商品評論入門指南

    如何使用Python爬取商品評論信息?這是一個有趣的問題。本文將從多個方面詳細講解Python爬蟲實現商品評論信息的抓取,包括:選擇合適的爬蟲工具、構建爬蟲流程、模擬網頁請求以及數…

    編程 2025-04-28
  • Python操作Web頁面

    本文將從多個方面詳細介紹Python操作Web頁面的技巧、方法和注意事項。 一、安裝必要的庫 在Python中操作Web頁面,需要用到一些第三方庫。 pip install req…

    編程 2025-04-28

發表回復

登錄後才能評論