pyppeteer 抓取网页

前言

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

熟悉的代码环节

"""
@author xiaofei
@email  [email protected]
@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

你可能感兴趣的:(爬虫-从入坑到脱坑)