python pyppeteer学习笔记

简介

Pyppeteer是Puppeteer的非官方Python支持,Puppeteer是一个无头JavaScript的基于Chrome/Chromium浏览器自动化库,可以用于对渲染网页的抓取。

优点
  • 免安装chrome。第一次使用时,会自动下载安装chromium(chromium相当于chrome的开发版本)。
    image
  • 可直接抓取JavaScript渲染结果

安装

pip install pyppeteer

使用

  • 启动浏览器
browser = await launch(headless=False)

headless默认为True,即无界面启动。

  • 创建页面
page = await browser.newPage()
  • 设置页面大小
page.setViewport({'width': 1200, 'height': 800})

  • 访问url
page.goto(url)
  • 查询所有页面
browser.pages()
  • 返回页面源代码
page.content()
  • 输入字符串
page.type(selector, text)

selector用于确认节点位置。

  • Type selector
    • 语法: eltname
    • 例子: input对应<input>
  • Class selector
    • 语法: .classname
    • 例子: .index对应class=index
  • ID selector
    • 语法: #idname
    • 例子: #index对应id=index
  • Universal selector
    选择所有元素,或者可以限制到特定的名称空间或所有名称空间。
    • 语法: * ns|* *|*
    • 例子: *会匹配到所有元素
  • Attribute selector
    • 语法: [attr] [attr=value] [attr~=value] [attr|=value] [attr^=value] [attr$=value] [attr*=value]
    • 例子: [autoplay]将匹配所有设置了autoplay attr对象的元素(任何值)。
  • 鼠标单击
page.click(selector)
  • 截图
page.screenshot({'path': 'example.png'})

具体用法可参考Puppeteer中文教程

例子

Pyppeteer 是基于 Python 的新特性 async 实现,里面进行了异步操作,所以需要配合 async/await 关键词来实现。

Pyppeteer访问页面后,使用page.content()获取源代码,用 pyquery 解析获得JavaScript 渲染的结果。

今日头条搜索python并爬取前10条标题。
import asyncio
from pyppeteer import launch
from pyquery import PyQuery as pq


async def main():
    browser = await launch(headless=False)
    page = await browser.newPage()
    await page.setViewport({'width': 1200, 'height': 800})
    await page.goto('https://www.toutiao.com')
    await asyncio.sleep(5)
    # 在搜索框中输入python
    await page.type('input.tt-input__inner', 'python')

    # 点击搜索按钮
    await page.click('button.tt-button')
    await asyncio.sleep(5)

    # print(page.url)
    # 今日头条点击后新开一个页面, 通过打印url可以看出page还停留在原页面
    # 以下用于切换至新页面
    pages = await browser.pages()
    page = pages[-1]
    # print(page.url)

    page_source = await page.content()
    text = pq(page_source)
    await page.goto(url="https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset=60&format=json&keyword=python&autoload=true&count=20&en_qc=1&cur_tab=1&from=search_tab&pd=synthesis&timestamp=1555589585193")
    for i in range(1, 10):
        print(text("#J_section_{} > div > div > div.normal.rbox > div > div.title-box > a > span".format(i)).text())

    await browser.close()

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

image

参考

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值