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

上一节说到了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())

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值