基于浏览器的python爬虫神器pyppeteer介绍及入门

简介

在讲 python 的 pyppeteer 前,先来说下 Node 的 puppeteer 库:

puppeteer的中文意思是:操纵木偶的人,木偶师。

那么 Node 的 puppeteer 是什么呢?

Puppeteer 是一个 Node 库,它提供了高级的 API 来控制 Chrome/Chromium,通过 DevTools 协议。Puppeteer默认使用无头浏览器,但是通过配置可以控制完整的 Chrome/Chromium 浏览器。
英文原文地址:https://github.com/puppeteer/puppeteer#puppeteer

通过介绍,再看 puppeteer 的图标,一个被操纵的浏览器,就会觉得很形象、直观有木有。
在这里插入图片描述
Puppeteer 库是由 Chrome DevTools 团队维护的。

说完了 Node 的 puppeteer 再回过来看 pyppeteer

pyppeteer 是 puppeteer 的非官方 python 版

了解 js 的同学知道,python 和 js 在很多方面挺像的,所以 pyppeteer 也力求尽可能的和 puppeteer 一致,但由于底层的不同,它们还是有些差异的,更多信息可以查看相关的官网。

官网信息

pyppeteer
  • github 地址:https://github.com/pyppeteer/pyppeteer
  • 文档:https://pyppeteer.github.io/pyppeteer/reference.html
puppeteer
  • github 地址:https://github.com/puppeteer/puppeteer
  • 中文文档:https://zhaoqize.github.io/puppeteer-api-zh_CN/#/
  • 英文文档:https://pptr.dev/

使用

安装

$ pip install pyppeteer # Python >= 3.6

配置

pyppeteer 在初次运行的时候,会自动下载 chromium(版本为 588429,发布时间为 2018-09-04T09:08:12.712Z)。
如果从国内的网直接下载,速度会很慢或无法下载,而且默认版本也比较老,因此,可以配置操作系统的环境变量,从国内的 taobao 镜像下载较新的 chromium。

淘宝镜像地址:
https://npm.taobao.org/mirrors/chromium-browser-snapshots
https://registry.npmmirror.com/binary.html?path=chromium-browser-snapshots/(2022-11-27更新)

~/.bashrc文件内添加环境变量配置(此处直接通过 shell 命令将配置追加到文件底部):

$ echo "export PYPPETEER_DOWNLOAD_HOST='https://npm.taobao.org/mirrors'">>~/.bashrc
$ echo "export PYPPETEER_CHROMIUM_REVISION='1075773'">>~/.bashrc # 此示例版本为当前最新版,发布日期为:2022-11-25T13:32:25.045Z 
$ source ~/.bashrc # 使新环境变量生效

常见示例

1. 打开浏览器,打开页面,关闭浏览器

demo.py

import asyncio

import pyppeteer


async def main():
	executablePath = pyppeteer.executablePath()
	print('自动下载的 chromium 的存储位置为:', executablePath)
	
    browser = await pyppeteer.launch(
    	headless=True,  # 如果为False, 则会打开浏览器界面,适合在有界面的机器上观察浏览器行为
    	executablePath=executablePath,  # 也可以指定为机器上的已安装的 Chrome 浏览器: r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
        args=[
            '--no-sandbox'
            #, '--proxy-server=socks5://192.168.237.1:10808'
        ]
    )
    
    page = await browser.newPage()
    await page.setViewport({'width': 1920, 'height': 1080})  # 调整页面的尺寸为 1920*1080
    await page.setJavaScriptEnabled(enabled=True)  # 允许 javascript 执行
    await page.goto(
    	'https://baidu.com', 
    	waitUntil='networkidle0'  # 直到未结束的网络连接数为 0,停止等待。(可以用来等待 ajax 结束)
    )
    html = await page.content()
    
   	# 3s 后关闭浏览器
   	await asyncio.sleep(3)
    await browser.close()

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

2. 截取完整网页
await page.screenshot({
	'path': 'baidu.png',
	'fullPage': True  # 截取完整页面,否则只会截取屏幕可见大小
})
3. 将网页保存为 mhtml 文件

mhtml 格式能将网页所有内容都存储到单个文件中

cdp = await page.target.createCDPSession()
result: dict = await cdp.send('Page.captureSnapshot', {'format': 'mhtml'})
with open('page.mhtml', 'w') as w:
	w.write(result['data'].replace('\r\n', '\n'))  # 解决 windows 多次换行问题
    	

更多内容可阅读相关官网,也欢迎留言讨论。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用pyppeteer进行爬虫的问题,我可以给您一些基本信息和指导。 Pyppeteer是一个用于控制Headless Chrome浏览器Python库,它基于Google的pychrome项目。它允许您使用Python代码自动化与网页进行交互,模拟用户操作,执行JavaScript代码,并提取所需的数据。 以下是使用pyppeteer进行爬虫的基本流程: 1. 安装依赖:使用pip安装pyppeteer库和其他必要的依赖项。 ``` pip install pyppeteer ``` 2. 创建和配置浏览器实例:使用pyppeteer.launch()方法创建一个浏览器实例,并使用一些选项配置它。 ```python import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://example.com') # 执行其他操作... asyncio.get_event_loop().run_until_complete(main()) ``` 3. 进行交互和数据提取:使用page对象与网页进行交互,例如点击按钮、填写表单、执行JavaScript等。您可以使用page.evaluate()方法来获取网页上的数据。 ```python import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://example.com') title = await page.evaluate('document.title') print(title) # 执行其他操作... asyncio.get_event_loop().run_until_complete(main()) ``` 4. 关闭浏览器实例:使用browser.close()方法关闭浏览器实例,释放资源。 ```python import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://example.com') # 执行其他操作... await browser.close() asyncio.get_event_loop().run_until_complete(main()) ``` 这只是一个基本示例,您可以根据您的具体需求进一步探索和使用pyppeteer。如果您需要更多的帮助或有其他问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值