iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python爬虫之pyppeteer库简单使用
  • 278
分享到

python爬虫之pyppeteer库简单使用

2024-04-02 19:04:59 278人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

pyppeteer 介绍Pyppeteer之前先说一下Puppeteer,Puppeteer是谷歌出品的一款基于node.js开发的一款工具,主要是用来操纵Chrome浏览器的 ap

pyppeteer

介绍Pyppeteer之前先说一下Puppeteer,Puppeteer是谷歌出品的一款基于node.js开发的一款工具,主要是用来操纵Chrome浏览器的 api,通过javascript代码来操纵Chrome浏览器,完成数据爬取、WEB程序自动测试等任务。

pyppeteer 是非官方 python 版本的 Puppeteer 库,浏览器自动化库,由日本工程师开发。

Puppeteer 是 Google 基于 node.js 开发的工具,调用 Chrome 的 API,通过 JavaScript 代码来操纵 Chrome 完成一些操作,用于网络爬虫、Web 程序自动测试等。

pyppeteer 使用了 Python 异步协程库asyncio,可整合 scrapy 进行分布式爬虫

puppet 木偶,puppeteer 操纵木偶的人。

pyppeteer和puppeteer的不同点

pyppeteer支持字典和关键字传参,puppeteer只支持字典传参


# puppeteer支支持字典传参
browser = await launch({'headless':True})

# pyppeteer支持字典和关键字传参
browser = await launch({'headless':True})
browser = await launch(headless=True)

元素选择器方法名$变为querySelector


# puppeteer使用$符
page.$()/page.%%()/page.$x()

# pyppeteer使用python风格的函数名
page.querySelector()/page.querySelectorAll()/page.xpath()

# 简写方式
page.J()/page.JJ()/page.Jx()

page.evluate()和page.querySelectorEval()的参数

puppeteer的evaluate()方法使用JavaScript原生函数或JavaScript表达式字符串。pyppeteer的evaluate()方法只使用JavaScript字符串,该字符串可以是函数也可以是表达式,pyppeteer会进行自动判断。但有时会判断错误,如果字符串被判断成了函数,并且报错,可以添加参数force_expr=True,强制pyppeteer作为表达式处理。

获取网页内容:


content = await page.evaluate('document.body.textContent',force_expr=True)

获取元素的内部文字:


element = await page.querySelector('h1')
title = await page.evaluate('(element) => element.textContent',element)

安装

1、安装pyppeteer


pip install pyppeteer

2、安装chromium


pyppeteer-install

简单使用


import asyncio
from pyppeteer import launch

async def main():
    url = 'https://www.toutiao.com/'
    # headless参数设置为Falase,则变成有头模式
    browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation'])
    page = await browser.newPage()
    
    # 设置页面视图大小
    await page.setViewport(viewport={'width':1600,'herght':900})
    
    # 是否启用JS,enabled设为False,则无渲染效果
    await page.setJavaScriptEnable(enabled=True)
    
    # 等待时间1000毫秒
    res = await page.goto(url,options={'timeout':1000})
    resp_headers = res.headers  # 响应头
    resp_status = res.status    # 响应状态
    
    # 等待
    await asyncio.sleep(2)
    await page.waitFor(1000)
    # 第二种方法 ,在while循环里强行查询某元素进行等待
    while not await page.querySelector('.t')
    
    # 滚动到页面底部
    await page.evaluate('window.scrollBy(0,document.body.scrollHeight)')
    
    await page.screenshot({'path':'test.png'})
    
    # 打印网页cookies
    print(await page.cookies())
    
    # 获取所有html内容
    print(await page.content())
    
    
    dimensions = await page.evaluate(pageFunction='''() => {
    		return {
    			width:document.documentElement.clentWidth,    // 页面宽度
    			height:document.documentElement.clentHeight,  // 页面高度
    			deviceScaleFactor: window.devicePixelRatio,  // 像素比1.0000000149011612
    			}
    		}''',force_expr=False)   # force_expr=False  执行的是函数
    print(dimensions)
    
    content = await page.evaluate(pageFunction='document.body.textContent',force_expr=True)    # 只获得文本 执行js脚本,force_expr=True  执行的是表达式
    print(content)
    
    # 打印当前页面的标题
    print(await page.title())
    
    
    # 抓取新闻内容  可以使用xpath表达式
    '''
    pyppeteer 三种解析方式
    page.querySelector()
    page.querySelectorAll()
    page.xpath()
    简写方式为:
    page.J()
    page.JJ()
    page.Jx()
    '''
    element = await page.querySelector(".feed-infinite-wrapper > ul>li")
    print(element)
    
    
    element = await page.querySelectorAll(".title-box a")
    for item in element:
        print(await item.getProperty('textContent'))
        # 获取文本内容
        title_str = await (await item.getProperty('textContent')).JSONValue()
        
        title_link = await (await item.getProperty('textContent')).jsonValue()
        
        # 获取属性值
        # title = await (await item.getProperty('class')).jsonValue()
        print(title_str,title_link)
    await browser.close()


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

模拟文本输入和点击


# 模拟输入账号密码 参数{'delay':reand_int()}  延迟输入时间
await page.type('#kw',"百度",delay=100)
await page.type('#TPL_username_1',"asdasd")

await page.waitFor(1000)
await page.click('#su')

移除Chrome正受到自动测试软件的控制


browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation'])
# 添加ignoreDefaultArgs=['--enable-automation'] 参数

爬取京东商城


from bs4 import BeautifulSoup
from pyppeteer import launch
import asyncio


def screen_size():
    return 1600,900


async def main(url):
    browser = await launch({"args":['--no-sandbox'],}) # "headless":False
    page = await browser.newPage()
    width, height = screen_size()
    await page.setViewport(viewport={'width':width,'height':height})
    await page.setJavaScriptEnabled(enabled=True)
    await page.setUserAgent('Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36')
    await page.goto(url)

    await page.evaluate('window.scrollBy(0, document.body.scrollHeight)')

    await asyncio.sleep(1)

    # content = await page.content()
    li_list = await page.xpath('//*[@id="J_goodsList"]/ul/li')

    item_list = []
    for li in li_list:
        a = await li.xpath('.//div[@class="p-img"]/a')
        detail_url = await (await a[0].getProperty('href')).jsonValue()
        promo_Words = await (await a[0].getProperty('title')).jsonValue()
        a_ = await li.xpath('.//div[@class="p-commit"]/strong/a')
        p_commit = await (await a_[0].getProperty('textContent')).jsonValue()
        i = await li.xpath('./div/div[3]/strong/i')
        price = await (await i[0].getProperty('textContent')).jsonValue()
        em = await li.xpath('./div/div[4]/a/em')
        title = await (await em[0].getProperty('textContent')).jsonValue()
        item = {
            "title" : title,
            "detail_url" : detail_url,
            "promp_words" : promo_words,
            "p_commit" : p_commit,
            "price" : price
        }
        item_list.append(item)

    await page_close(browser)
    return item_list


async def page_close(browser):
    for _page in await browser.pages():
        await _page.close()
    await browser.close()


url = 'Https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&wq='\
		'%E6%89%8B%E6%9C%BA&pvid=e07184578b8442c58DDD65b221020e99&page={}&s=56&click=0 '
task_list = []
for i in range(1,4):
    page = i * 2 - 1
    task_list.append(main(url.fORMat(page)))

results = asyncio.get_event_loop().run_until_complete(asyncio.gather(*task_list))

for i in results:
    print(i,len(i))

print('*'*100)

在这里插入图片描述

到此这篇关于python爬虫之pyppeteer库的文章就介绍到这了,更多相关python爬虫pyppeteer库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python爬虫之pyppeteer库简单使用

本文链接: https://www.lsjlt.com/news/130023.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python爬虫之pyppeteer库简单使用
    pyppeteer 介绍Pyppeteer之前先说一下Puppeteer,Puppeteer是谷歌出品的一款基于Node.js开发的一款工具,主要是用来操纵Chrome浏览器的 AP...
    99+
    2024-04-02
  • Python简单爬虫
    爬取链家二手房源信息import requests import re from bs4 import BeautifulSoup import csv url = ['https://cq.lianjia.com/ershoufang/...
    99+
    2023-01-31
    爬虫 简单 Python
  • python爬虫-简单使用xpath下载
      首先 1.为方便以下进行       谷歌浏览器里要安装xpath脚本  2.下载一个lmxl     命令:pip install lxml 3. 以下三张图是一个,当时爬的 《糗事百科》里的图片   值的注意的是:在爬取接口时,要...
    99+
    2023-01-30
    爬虫 简单 python
  • python简单爬虫笔记
    python模拟游览器爬取相关页面 import urllib.request url="https://blog.51cto.com/itstyle/2146899" #模拟浏览器 headers=("User-Agent","Moz...
    99+
    2023-01-31
    爬虫 简单 笔记
  • Python 简单业务爬虫
    如何快速下载贴吧图片呢?#!/usr/bin/python # -*- coding: UTF-8 -*- import urllib import re def getHtml(url):     page = urllib.urlop...
    99+
    2023-01-31
    爬虫 简单 业务
  • 使用python编写简单网络爬虫(一)
          总算有时间动手用所学的python知识编写一个简单的网络爬虫了,这个例子主要实现用python爬虫从百度图库中下载美女的图片,并保存在本地,闲话少说,直接贴出相应的代码如下:---------------------------...
    99+
    2023-01-31
    爬虫 简单 网络
  • python实现简单爬虫--爬图片
    首先有两个功能需求:第一:获取到要爬的页面html内容;第二:使用正则表达式进行匹配并进行保存到本地。#!/usr/bin/env python #encoding:utf-8 import urllib import re def get...
    99+
    2023-01-31
    爬虫 简单 图片
  • 使用Python实现简单的爬虫框架
    目录一、请求网页二、解析 HTML三、构建爬虫框架爬虫是一种自动获取网页内容的程序,它可以帮助我们从网络上快速收集大量信息。在本文中,我们将学习如何使用 Python 编写一个简单的...
    99+
    2023-05-19
    Python如何实现爬虫框架 Python爬虫框架 Python爬虫
  • python爬虫之requests库的使用详解
    目录python爬虫—requests库的用法基本的get请求带参数的GET请求:解析json使用代理获取cookie会话维持证书验证设置超时异常捕获异常处理 总结 python爬虫...
    99+
    2024-04-02
  • Python爬虫之Urllib库的基本使
    # get请求 import urllib.request response = urllib.request.urlopen("http://www.baidu.com") print(response.read().decode('...
    99+
    2023-01-30
    爬虫 Python Urllib
  • python爬虫之requests库使用代理方式
    目录安装上requests库GET方法谷歌浏览器的开发者工具POST方法使用代理在看这篇文章之前,需要大家掌握的知识技能: python基础html基础http状态码 让我们看看这篇...
    99+
    2024-04-02
  • Python爬虫进阶之如何使用urllib库
    这篇文章主要介绍了Python爬虫进阶之如何使用urllib库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python的数据类型有哪些python的数据类型:1. 数字类型...
    99+
    2023-06-14
  • 一个简单的python爬虫,爬取知乎
    一个简单的python爬虫,爬取知乎主要实现 爬取一个收藏夹 里 所有问题答案下的 图片文字信息暂未收录,可自行实现,比图片更简单具体代码里有详细注释,请自行阅读项目源码:# -*- coding:utf-8 ...
    99+
    2023-06-02
  • Python爬虫之Requests库的基
    1 import requests 2 response = requests.get('http://www.baidu.com/') 3 print(type(response)) 4 print(response....
    99+
    2023-01-30
    爬虫 Python Requests
  • Python爬虫之urllib库详解
    目录一、说明:二、urllib四个模块组成:三、urllib.request1、urlopen函数2、response 响应类型3、Request对象 4、高级请求方式四、urlli...
    99+
    2024-04-02
  • python简单爬虫--get方式详解
    目录环境准备进行爬虫参考总结简单爬虫可以划分为get、post格式。其中,get是单方面的获取资源,而post存在交互,如翻译中需要文字输入。本文主要描述简单的get爬虫。 环境准备...
    99+
    2024-04-02
  • 爬虫笔记1:Python爬虫常用库
    请求库:1、urllib:urllib库是Python3自带的库(Python2有urllib和urllib2,到了Python3统一为urllib),这个库是爬虫里最简单的库。2、requests:requests属于第三方库,使用起来...
    99+
    2023-01-31
    爬虫 常用 笔记
  • python爬虫怎么使用BeautifulSoup库
    本篇内容介绍了“python爬虫怎么使用BeautifulSoup库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  BeautiSoup类...
    99+
    2023-06-02
  • Python 简单爬虫抓取糗事百科
        该爬虫主要实现的功能是抓取糗事百科里面的一些段子。    urllib2可以用urllib2.openurl中设置Request参数,来修改Header头。如果你访问一个网站,想更改User Agent(可以伪装你的浏览器),你就要...
    99+
    2023-01-31
    爬虫 糗事 百科
  • python爬虫之selenium库的安装及使用教程
    目录第一步:python中安装selenium库第二步:下载谷歌浏览器驱动并合理放置第三步:使用selenium爬取QQ音乐歌词(简单示例)第一步:python中安装selenium...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作