网络爬虫反反爬小技巧(二)Pyppeteer

2023-11-03

上一节说到了Selenium,它的功能的确非常强大,但很多时候我们会发现 Selenium 还是有一些不太方便的地方,比如速度太慢、对版本配置要求严苛,最麻烦是经常要更新对应的驱动,还有些网页是可以检测到是否使用了Selenium 。

所以在这里我们就要请出爬虫神器 「Pyppeteer」 了,虽然支持的浏览器比较单一,但在安装配置的便利性和运行效率方面都要远胜 Selenium。Pyppeteer 依赖于 Chromium 这个浏览器来运行的。有了 Pyppeteer 之后,我们就可以免去那些烦琐的环境配置等问题。如果第一次运行的时候,Chromium 没有安装,那么程序会帮我们自动安装和配置。另外 Pyppeteer 是基于 Python 的新特性 async 实现的,所以它的一些执行也支持异步操作,效率相对于 Selenium 来说也提高了。(具体用法移步到:https://miyakogi.github.io/pyppeteer/reference.html )。(PyPI地址:https://pypi.org/project/pyppeteer/,最近一次更新时间: May 8, 2020)。

这里以一个简单demo展示其用法(以打开CSDN首页为例):

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=False, args=['--disable-infobars'])
    page = await browser.newPage()
    await page.goto('https://www.csdn.net/')
    await asyncio.sleep(100)
    await browser.close()

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

不过在使用 Pyppeteer 仍然会遇到无头浏览器检测,这里安利一个第三方库「pyppeteer-stealth」,这个库是「puppeteer-extra-plugin-stealth」的Python移植版。

「puppeteer-extra-plugin-stealth」引用Github上的说明「Applies various evasion techniques to make detection of headless puppeteer harder.」「A plugin for puppeteer-extra to prevent detection.」(Github地址:https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth )。

可见,「pyppeteer-stealth」也是用于防止机器人检测的。(PyPI地址:https://pypi.org/project/pyppeteer-stealth/ )。用法也很简单,这里粘上其在PyPI上的demo:

import asyncio
from pyppeteer import launch
from pyppeteer_stealth import stealth

async def main():
    browser = await launch(headless=True)
    page = await browser.newPage()

    await stealth(page)  # <-- Here

    await page.goto("https://bot.sannysoft.com/")
    await browser.close()
asyncio.get_event_loop().run_until_complete(main())

这样就可以省去隐藏WebDriver等操作,可谓省时省力省心。

最后,说下 Pyppeteer 使用带有权限验证的代理的方式,其中关键点有两个:

一个是在 args列表中的 '--proxy-server={proxy}',它的作用是把代理 IP 传入到Pyppeteer 中。

第二个是 awaitpage.authenticate({'username':'账号','password':'密码'})用于指定代理 IP 的账号和密码。

import asyncio
from pyppeteer import launch


async def register():
    browser = await launch({
        'headless': True,
        'args': ['--proxy-server={ip:port}']
    })

    page = await browser.newPage()
    # 设置代理ip验证
    await page.authenticate({
        'username': '用户名',
        'password': '密码'
    })
    await page.goto('http://icanhazip.com')
    doc = await page.content()
    print(doc)
    await browser.close()

asyncio.get_event_loop().run_until_complete(register())

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络爬虫反反爬小技巧(二)Pyppeteer 的相关文章

随机推荐

  • 超七成阅读APP都借百度语音技术促用户增长

    全国十多亿人在这个春节集体 关门闭户 与手机和网络作伴 除了手游和短视频流量飞涨 在线阅读也迎来 高光时刻 特别是当手机阅读APP标配了语音朗读即 听书 功能 据百度大脑AI开放平台的后台数据显示 疫情期间 支持 听书 功能的语音合成技术的
  • 重新映射图像——OpenCV Remap实例

    重新映射图像 OpenCV Remap实例 在计算机视觉领域中 图像的几何变换是一项重要的工作 重要的任务之一是将图像转换为其他形式 例如投影或扭曲 OpenCV的Remap函数提供了一个简单和灵活的方法来执行这种类型的变换 下面展示了如何
  • unsigned char 数值溢出问题

    include
  • 在D盘使用SVN检出文件后,整个盘出现蓝色问号的解决办法。

    在D盘使用SVN检出文件后 整个盘出现蓝色问号的解决办法 原因 在该盘的根目录执行了checkout操作 SVN将整个盘作为了一个版本库的本地副本 那些问号表示这些文件没有被SVN控制 解决方法 1 在文件上右击 选择TortoiseSVN
  • android studio电影院选座,8排电影院选座最佳位置

    8排电影院选座最佳位置在哪里呢 8排电影院属于小影厅 小影厅银幕宽度在10米以下 座位100以内 座位排数通常拥有8 14排 小影厅整体空间小 选座时要选中间稍靠后一些的位置 由于整体排数少 因此选即便选择靠后一些的排数实际上距银幕的距离也
  • ubuntu 同时使用无线网卡和有线网卡

    转载于这位博主 文章
  • Ubuntu18.04 取消开机密码 实现自动登录

    因为要把Ubuntu设备作为服务器 实现开机自动运行服务程序 所以需要取消开机密码 实现自动登录 1 点击桌面右上角向下的箭头 点击设置图标 2 点击右上角的 Unlock 3 在弹出的窗口中输入系统登录密码 点击右下角 Authentic
  • OpenMP并行编程

    1 总览 OpenMP Open Multi Processing 是一种用于共享内存并行系统的多线程程序设计方案 支持的编程语言包括C C 和Fortran OpenMP提供了对并行算法的高层抽象描述 通过线程实现并行化 特别适合在多核C
  • springboot使用logback日志框架超详细教程

    前言 项目中日志系统是必不可少的 目前比较流行的日志框架有log4j logback等 可能大家还不知道 这两个框架的作者是同一个人 Logback旨在作为流行的log4j项目的后续版本 从而恢复log4j离开的位置 另外 slf4j Si
  • 阶乘约数

    include
  • 【4月第二周学习记录】数据结构与算法王卓-第六章图-图的遍历(邻接矩阵与邻接表,DFS与BFS)

    1 图的遍历基本思路与方法 图的遍历的定义与visited数组 常用的遍历方法 深度优先搜索遍历 Depth First Search DFS 广度优先搜索遍历 Breadth First Search BFS 2 深度优先搜索遍历 Dep
  • 华为SMC2.0视频会议系统总结(一)

    简单总结下 新上手的华为视频会议SMC2 0会控系统 第一次接触华为的会控系统 理解的不是很深刻 简单的记下来 省得以后忘记 因为客户使用的泛微OA系统 我们公司 南大智慧 负责提供华为设备 并做相应的接口开发工作 我们主要的工作内容就是确
  • 控制器的编码器

    一 原理 控制器内部为每个轴配置了脉冲计数装置 控制器默认的脉冲计数源是外部编码器 如果用户 在接线时将外部编码器的信号与端子板 25pin轴接口的编码器信号接在一起 就可以调用指令读取外部编码器的值 如果用户没有接外部编码器反馈信号 例如
  • java基础学习 day22(方法,return,重载)

    1 方法 是程序中最小的执行单元 方法里面的代码 要么全都执行 要么全都不执行 重复的代码 具有独立功能的代码可以抽取到方法中 方法的好处 可以提高代码的复用性 可以提高代码的可维护性 java虚拟机在运行时会先自动调用main 方法 2
  • ## 带AB相编码器直流减速电机测转动速度及角度深度解析

    带AB相编码器直流减速电机测转动速度及角度深度解析 下图为编码器输出的AB相波形 一般情况下 我们只测A相 或B相 的上升沿或下降沿 但四倍频的方法是测A相和B相的上升沿和下降沿 在同样的时间内 计数脉冲是以前的4倍 然后stm32单片机可
  • 一致性的3种协议,并发,事务

    Two Phase Commit MVCC Paxos TPC对应于传统数据库上的local cluster的一致性 分布式事务 每个节点上的local事务可以是不同的亦可以是相同的 replica MVCC的思想是抓住Transactio
  • vue项目中使用vee-validate表单验证

    一 写在前面 作为前端开发 在项目中避免不了做表单到页面 做表单页面就避免不了要做表单效验 如果多个表单页面有相同都表单比如用户名 密码等等 不能每个页面都写一次验证规则 作者项目平时使用都vue比较多 所有使用vee validate插件
  • C++标准模板库(Standard Template Library,STL)

    文章目录 标准模板库介绍 C 标准库头文件 STL 组成 迭代器 算法 适配器 标准模板库介绍 标准模板库 Standard Template Library STL 是惠普实验室开发的一系列软件的统称 虽说它主要出现到C 中 但在被引入C
  • JDK安装及JAVA环境变量配置(JDK1.8版本)

    一 JDK官网下载地址 https www oracle com technetwork java javase downloads jdk12 downloads 5295953 html JDK1 8下载地址 https www ora
  • 网络爬虫反反爬小技巧(二)Pyppeteer

    上一节说到了Selenium 它的功能的确非常强大 但很多时候我们会发现 Selenium 还是有一些不太方便的地方 比如速度太慢 对版本配置要求严苛 最麻烦是经常要更新对应的驱动 还有些网页是可以检测到是否使用了Selenium 所以在这