pyppeteer 抓取网页

前言

Pyppeteer 是谷歌chrome官方无头框架puppeteer的python版本, 基于Chrome/Chromium浏览器自动化库,可以用于对渲染网页的抓取, 效果跟selenium+chromedrive一样

熟悉的代码环节

"""
@author xiaofei
@email  zhengxiaofei@zhuge.com
@date   2019-07-03
@desc
"""

import asyncio
from pyppeteer import launch


# api文档  https://github.com/GoogleChrome/puppeteer/blob/v1.18.1/docs/api.md#puppeteerlaunchoptions

async def run(url):
    brower = await launch({
        "headless": False  # 设置模式, 默认无头
    })
    # 打开新页面
    page = await brower.newPage()

    # 设置页面视图大小
    await page.setViewport(viewport={'width': 1280, 'height': 800})

    # 是否启用JS,enabled设为False,则无渲染效果
    await page.setJavaScriptEnabled(enabled=True)

    print("默认UA", await brower.userAgent())
    # 设置当前页面UA
    await page.setUserAgent(
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36")

    # 打开路由
    await  page.goto(url)

    # 输入内容  不会写选择器可以直接选择标签copy js path
    await page.type("#kw.s_ipt", "小僵尸博客")
    # 点击搜索
    await page.click("input#su")

    # 等待0.5S
    # await asyncio.sleep(0.5)
    # 在while循环里强行查询某元素进行等待 用 querySelector 和 xpath都行
    # while not await page.querySelector("#content_left"):
    #     pass
    while not await page.xpath("//div[@id='content_left']"):
        pass

    # waitFor 不能用, 这个方法官方api是可以根据 "//" 来判断是xpath还是Selector, 而且还有timeout参数
    # while not await page.waitFor("#content_left"):
    #     pass

    print("页面cookie", await page.cookies())
    print("页面标题", await page.title())
    print("页面内容", await page.content())

    # 截图
    await page.screenshot({'path': 'test.png'})

    # 滚动到页面底部
    await page.evaluate('window.scrollBy(0, window.innerHeight)')

    await brower.close()


loop = asyncio.get_event_loop()
loop.run_until_complete(run("https://www.baidu.com"))

总结

很舒服的一点就是首次运行时,pyppeteer会自动下载对应操作系统的chromium, 不用自己再去找对应版本的包去下载
不好的地方就是有一些api不能用, 但基础功能没啥问题, 我只是用来渲染页面获取源码, 解析的话我还是喜欢用我的解析器去写

参考文献

https://www.jianshu.com/p/611ed6b75d47
https://github.com/GoogleChrome/puppeteer/blob/v1.18.1/docs/api.md#puppeteerlaunchoptions

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小僵尸打字员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值