龙空技术网

Python Pyppeteer 指南

蜗牛学技术 194

前言:

现时我们对“python27goagent”大体比较注重,我们都需要剖析一些“python27goagent”的相关知识。那么小编也在网络上网罗了一些关于“python27goagent””的相关知识,希望兄弟们能喜欢,我们快快来学习一下吧!

Pyppeteer是Puppeteer的非官方 Python 包装器,Puppeteer 是非常流行的 Javascript Chrome/Chromium 浏览器自动化库。

使用像Pyppeteer这样的无头浏览器为Python 开发人员提供了一个真正的替代旧浏览器自动化库(如Selenium)的方法。

Python Pyppeteer 是可用于浏览器自动化和网页抓取的最佳无头浏览器选项之一,因此在本指南中我们将介绍如何:

如何安装 Python Pyppeteer如何使用 Pyppeteer如何使用 Pyppeteer 抓取页面如何等待页面加载如何使用 Pyppeteer 单击按钮如何使用 Pyppeteer 滚动页面如何使用 Pyppeteer 截屏如何通过 Pyppeteer 使用代理更多 Pyppeteer 功能需要帮助抓取网络吗?

然后查看ScrapeOps,这是用于网页抓取的完整工具包。

代理管理器

铲运机监控

作业调度

如何安装 PythonPyppeteer

安装和设置pyppeteer非常简单。

首先,您需要安装pyppeteer本身:

pip install pyppeteer 

或者从此 Github 存储库安装最新版本:

pip install -U git+
如何使用Pyppeteer

现在,让我们使用pyppeteer创建第一个脚本来在浏览器中打开页面。

## demo.pyimport asynciofrom pyppeteer import launchasync def main():    browser = await launch()    page = await browser.newPage()    await page.goto(';)    await page.screenshot({'path': 'screenshot.png'})    await browser.close()asyncio.get_event_loop().run_until_complete(main())

Pyppeteer 默认情况下支持异步,这意味着我们的脚本异步处理浏览器自动化步骤,这可以显着提高性能。

现在,当我们运行脚本时demo.py:

python demo.py

我们的 Pyppeteer 脚本将打开浏览器并拍摄 ScrapeOps 主页的图片并将其保存为screenshot.png.

下载 CHROMIUM 浏览器

当你第一次运行pyppeteer时,如果你的系统上没有找到它,它会下载最新版本的 Chromium (~150MB)。这可能会延迟脚本的运行。

如果您希望在运行脚本之前下载最新版本的 Chromium,可以使用以下命令:

pyppeteer-install
如何使用Pyppeteer

Pyppeteer 和其他浏览器自动化库的一个常见用例是抓取网站。

您可以使用 Pyppeteer 的Javascipts Document API实现轻松抓取网站。

import asynciofrom pyppeteer import launchasync def main():    browser = await launch()    page = await browser.newPage()    await page.goto(';)    ## Get Title    title_html = await page.querySelector('h1')    title = await title_html.getProperty("textContent")    print('title', title)    await browser.close()asyncio.get_event_loop().run_until_complete(main())

或者,我们可以从响应中检索 HTML 内容,并使用像BeautifulSoup这样的库来解析我们需要的数据。

import asynciofrom pyppeteer import launchfrom bs4 import BeautifulSoupasync def main():    browser = await launch()    page = await browser.newPage()    await page.goto(';)    ## Get HTML    html = await page.content()    await browser.close()    return htmlhtml_response = asyncio.get_event_loop().run_until_complete(main())## Load HTML Response Into BeautifulSoupsoup = BeautifulSoup(html_response, "html.parser")title = quote_block.find('h1').textprint('title', title)
如何等待页面加载

使用无头浏览器时的一个常见要求是确保在进入下一步之前所有内容均已加载。

使用 Pyppeteer,我们可以通过两种方式做到这一点:

等待特定时间等待页面元素出现等待特定时间

要在执行脚本中的后续步骤之前等待特定的时间,我们可以简单地使用page.waitFor(5000)脚本命令并定义一个以毫秒为单位的时间:

import asynciofrom pyppeteer import launchasync def main():    browser = await launch()    page = await browser.newPage()    await page.goto(';)    await page.waitFor(5000)     ## Next Steps    await browser.close()asyncio.get_event_loop().run_until_complete(main())
等待页面元素出现

另一种方法是等待页面元素出现在页面上,然后再继续。

我们可以使用以下方法来做到这一点page.waitForSelector():

import asynciofrom pyppeteer import launchasync def main():    browser = await launch()    page = await browser.newPage()    await page.goto(';)    await page.waitForSelector('h1', {'visible': True})     ## Next Steps    await browser.close()asyncio.get_event_loop().run_until_complete(main())
如何使用Pyppeteer

使用 Pyppeteer 单击按钮或其他页面元素非常简单。

我们只需要使用选择器找到它,然后告诉 Pyppeteer 单击它:

import asynciofrom pyppeteer import launchasync def main():    browser = await launch()    page = await browser.newPage()    await page.goto(';)    ## Click Button    link = await page.querySelector("h1")    await link.click()    await browser.close()asyncio.get_event_loop().run_until_complete(main())
如何使用Pyppeteer

许多现代网站现在使用无限滚动将更多结果加载到页面上。

要求您滚动页面来抓取您需要的所有数据。

我们可以使用以下命令滚动到页面底部evalute

import asynciofrom pyppeteer import launchasync def main():    browser = await launch()    page = await browser.newPage()    await page.goto(';)    ## Scroll To Bottom    await page.evaluate("""{window.scrollBy(0, document.body.scrollHeight);}""")    await browser.close()asyncio.get_event_loop().run_until_complete(main())
如何使用Pyppeteer

使用自动浏览器的另一个常见用例是截屏。Pyppeteer 使之变得非常简单。

要使用 Pyppeteer 进行屏幕截图,我们只需要使用page.screenshot() 并定义保存文件的路径。

import asynciofrom pyppeteer import launchasync def main():    browser = await launch()    page = await browser.newPage()    await page.goto(';)    await page.screenshot({'path': 'screenshot.png'})    await browser.close()asyncio.get_event_loop().run_until_complete(main())

您还可以在截取屏幕截图之前更改页面大小page.setViewport():

await page.setViewport({"width": 1600, "height": 900})await page.screenshot({'path': 'screenshot.png'})
如何通过Pyppeteer

如果您正在抓取,那么您可能会想要使用代理。

使用 Pyppeteer,您可以在启动浏览器时设置代理:

import asynciofrom pyppeteer import launchasync def main():    browser = await launch({'args': ['--proxy-server=ip:port'], 'headless': False })    page = await browser.newPage()    await page.goto(';)    await browser.close()asyncio.get_event_loop().run_until_complete(main())

如果您需要对代理进行身份验证,则可以这样做:

import asynciofrom pyppeteer import launchasync def main():    browser = await launch({'args': ['--proxy-server=ip:port'], 'headless': False })    page = await browser.newPage()    await page.authenticate({'username': 'user', 'password': 'passw'})    await page.goto(';)    await browser.close()asyncio.get_event_loop().run_until_complete(main())
更多 Pyppeteer功能

Python Pyppeteer 具有大量的功能并且高度可定制,以至于很难在一个指南中正确涵盖所有内容。

因此,如果您想了解有关 Python Pyppeteer 的更多信息,请查看此处的官方文档。

它涵盖了从设置用户代理开始的所有内容:

await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36')

要以无头模式运行浏览器:

browser = await launch({"headless": True})
更多网页抓取教程

在本指南中,我们向您介绍了 Python Pyppeteer 的基本功能以及如何在您自己的项目中使用它。

如果您想了解有关 Python 或其他 Python 库 Scrapy 的不同 Javascript 渲染选项的更多信息,请务必查看我们的其他指南:

Scrapy JS 渲染库比较Scrapy 入门指南Scrapy 硒指南

如果您想了解有关 Scrapy 的更多一般信息,请务必查看Python Web Scraping Playbook。

标签: #python27goagent