Pythonクローラーアーティファクトpyppeteer

前書き

pyppeteer  は、Puppeteerライブラリの非公式なPythonバージョンであり、日本のエンジニアによって開発されたブラウザオートメーションライブラリです。

Puppeteer  は、GoogleがNode.jsに基づいて開発したツールです。ChromeのAPIを呼び出し、JavaScriptコードを使用してChromeを操作し、ウェブクローラーと自動ウェブプログラムテストの一部の操作を完了します。

pyppeteerは  Pythonの非同期コルーチンライブラリの使用  asyncio分散クロールするScrapyを統合することができ、。

Pyppeteerは十分に保守されていません;人形の人形;人形の人形のマニピュレーター。

ここに画像の説明を挿入

インストール

  1. インストール pyppeteer
pip install pyppeteer

 

    2.インストール Chromium

pyppeteer-install

 

注:pyppeteerを初めて実行すると、Chromiumが自動的にダウンロードされます(Chromeの試験的バージョン、約150MB)。

Chromium インストールが失敗した場合は、  手動でダウンロードできます

ここに画像の説明を挿入

3. Chromiumストレージパスを表示する

import pyppeteer print(pyppeteer .__ chromium_revision__)#バージョン番号を表示

print(pyppeteer.executablePath())#Chromiumストレージパスを表示

#588429

#C:\ Users \ Administrator \ AppData \ Local \ pyppeteer \ pyppeteer \ local-chromium \ 588429 \ chrome-win32 \ chrome.exe

解凍先:C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429\ 下

フォルダの  chrome-win 名前  chrome-win32 を

ここに画像の説明を挿入

構成の詳細については、Pyppeteer環境変数を参照してください。 

最初のテスト

バイドゥを開いてスクリーンショットを撮る

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=False)  # 关闭无头浏览器
    page = await browser.newPage()
    await page.goto('https://www.baidu.com/') # 跳转
    await page.screenshot({'path': 'example.png'})  # 截图
    await browser.close() # 关闭

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

ブラウザのパスを指定

パラメータを指定する executablePath

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=False, executablePath=r'C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429\chrome-win32\chrome.exe')  # 关闭无头浏览器
    page = await browser.newPage()
    await page.goto('https://www.baidu.com/') # 跳转
    await page.screenshot({'path': 'example.png'}) # 截图
    await browser.close()  # 关闭

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

Chromeの削除は自動テストソフトウェアによって制御されています

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation']
    input()
    await browser.close()

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

ここに画像の説明を挿入

全画面表示

import tkinter
import asyncio
from pyppeteer import launch

def screen_size():
    tk = tkinter.Tk()
    width = tk.winfo_screenwidth()
    height = tk.winfo_screenheight()
    tk.quit()
    return {'width': width, 'height': height}

async def main():
    browser = await launch(headless=False, args=['--start-maximized']) # 页面全屏
    page = await browser.newPage()
    await page.setViewport(screen_size()) # 内容全屏
    await page.goto('https://www.baidu.com/')
    input()
    await browser.close()

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

ページコンテンツ

Page.content() または Page.evaluate()

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=False)
    page = await browser.newPage()
    url = 'https://www.baidu.com/'
    await page.goto(url)
    # content = await page.content()
    content = await page.evaluate('document.body.textContent', force_expr=True)
    print(content)
    input()
    await browser.close()

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

非同期で実行する

asyncio.wait() または  asyncio.gather()、一度だけ読み取る必要があるページでのみ使用することをお勧めします。スクロールにはお勧めしません

import asyncio
from pyppeteer import launch

async def crawl(url):
    browser = await launch(headless=False)
    page = await browser.newPage()
    await page.goto(url)
    title= await page.title()
    print(title)
    print(title)
    await browser.close()

async def main():
    urls = [
        crawl('https://www.baidu.com/'),
        crawl('https://www.bing.com/')
    ]
    await asyncio.wait(urls)
    # await asncio.gather(*urls)

asyncio.get_event_loop().run_until_complete(main())
# 百度一下,你就知道
# 微软 Bing 搜索 - 国内版

报错OSError:一時的なユーザーデータを削除できません

ブラウザの起動時にキャッシュを格納するパラメータuserDataDirを指定して、システムディスクではなくハードディスクが大きいことを確認します。

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=False, userDataDir='./cache/')
    input()
    await browser.close()

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

报错pyppeteer.errors.TimeoutError:ナビゲーションのタイムアウトを超えました:30000ミリ秒を超えました。



 

パッケージ

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation'], userDataDir='./cache/') #
    page = await browser.newPage()
    await page.setViewport({'width': 1366, 'height': 768})  # 内容铺满
    await page.goto('https://www.baidu.com/') # 跳转
    input('回车退出')
    await browser.close()

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

参照

  1. pyppeteer / pyppeteer:ヘッドレスクロム/クロムオートメーションライブラリ
  2. Pyppeteerのドキュメント
  3. Chromium-Chromiumプロジェクト
  4. Pyppeteer環境変数
  5. Pyppeteer環境の構築、共通パラメーター、2つのケース
  6. 発生したPyppeteerのバグと解決策
  7. pyppeteerがJingdong MallとTaobaoのサンプルコードをクロールする| Cookieクロール検索コンテンツを取得する
  8. pyppeteerチュートリアル
  9. pyppeteer:OSErrorの問題を解決:一時ユーザーデータを削除できません
  10. pyppeteerナビゲーションタイムアウトの問題を解決:pyppeteer.errors.TimeoutError:ナビゲーションタイムアウト超過:30000ミリ秒を超えました。
  11. Python非同期プログラミングのasyncio(ミリオン同時実行)
  12. Python非同期プログラミングの開始

おすすめ

転載: blog.csdn.net/zhangge3663/article/details/108201064