首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何用pyppeteer获取数据,模拟登陆?

如何用pyppeteer获取数据,模拟登陆?

作者头像
mixlab
发布于 2019-08-02 06:38:30
发布于 2019-08-02 06:38:30
3K00
代码可运行
举报
运行总次数:0
代码可运行

本指南适合0基础的读者一步步练习,从而上手python,有基础的可以快速浏览,了解整个思路即可。

01

安装环境

本指南使用的是python开发环境,先用pip安装pyppeteer库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 -m pip install pyppeteer

详细可以参考官方github:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/miyakogi/pyppeteer

02

hello world!

初次与pyppeteer见面,我们运行下最简单的爬虫代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#引用相关的库
import asyncio
from pyppeteer import launch
async def main():
    browser = await launch()
    page = await browser.newPage()

    #想爬取哪个页面,修改对应的url即可,
    #注意timeout的设置,因为有时候网速比较慢,可以把超时的时间设得久一点。

    await page.goto('https://getgetai.com',{"timeout":3*60000})

    #screenshot是截屏的命令,path设置截屏后的图片保存路径跟名称
    #await page.screenshot({'path': 'example.png'})

    #evaluate是注入js到url的页面里,需要具备js的相关知识
    result = await page.evaluate('''() => {
           //获得网页的标题
           var res=document.title
           //把结果返回给python
           return res
    }''')
    #打印返回的结果
    print(result)

await browser.close()

#main是异步执行的,需要用这行代码来执行,而不是直接main()
asyncio.get_event_loop().run_until_complete(main())

03

获取数据,通过研究网页的接口请求方式

网上大部分的爬虫教程都介绍的是通过html的解析来获取自己想要的数据,这种方式需要写大量的html规则,而且需要非常熟悉class、id、attribute、元素直接的相对关系才能从页面上获得自己想要的数据。

目前大部分的网站数据加载都是通过接口来异步加载的,所以我们可以使用接口的方式获取数据,通过研究目标网页的接口请求,直接请求对应的接口获得结构化的数据。

那么,如何研究目标网页的接口请求呢?

打开chrome的开发者工具,点击network面板,点击XHR项,然后刷新页面,查看下面的接口,从中找到想要获取的数据。

给一个示例

目标网站

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.todaytix.com/x/london/shows

找到目标接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://api.todaytix.com/views/v2/heroList?location=2&fieldset=HeroSuperEssentials

对应的获取数据的js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async function postData() {
  var _url = "https://api.todaytix.com/views/v2/heroList?location=2&fieldset=HeroSuperEssentials";
  return new Promise(function (resolve, reject) {
       fetch(_url, {
              method: 'GET', 
              mode: 'cors', 
       })
       .then(response => response.json())
       .then(data => {
           resolve(data);
       });
 })
};

写成python代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import asyncio
from pyppeteer import launch
async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://www.todaytix.com/x/london/shows',{"timeout":3*60000})
    result = await page.evaluate('''async () => {
            async function postData() {
                var _url = "https://api.todaytix.com/views/v2/heroList?location=2&fieldset=HeroSuperEssentials";
                return new Promise(function (resolve, reject) {
                    fetch(_url, {
                        method: 'GET',
                        mode: 'cors', 
                    })
                    .then(response => response.json())
                    .then(data => {
                        resolve(data);
                    });
                })
            };
        var res=await postData()
        return res
    }''')
    print(result)

await browser.close()
asyncio.get_event_loop().run_until_complete(main())

04

模拟登陆,以印象笔记为例

pyppeteer还可以可视化的调试,只要在launch中通过headless的设置,即可开启可视化的模式。这里可以了解下无头浏览器的相关知识。

什么是无头浏览器headless browser,简单来说是一种没有可视化界面的web浏览器。

做前端开发和web测试的同学对 Headless都不会陌生,它可以直接运行在服务端,向客户端提供服务接口。浏览器该有的功能它都有,只是没有界面而已。

以下为代码,记得把

user_name 跟

pass_word 修改为自己的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import asyncio
from pyppeteer import launch
async def main():
       user_name='your username'
       pass_word='your password'
       #无头模式关闭
       browser = await launch({'headless': False})
       page = await browser.newPage()
       await page.goto('https://app.yinxiang.com/Login.action',{"timeout":14*60000})

       await page.type("#username",user_name)
       await page.click("#loginButton")
       await page.waitFor(3000)
       await page.type("#password",pass_word)
       await page.click("#loginButton")
       result = await page.evaluate('''() => {
              var res=document.title
              return res
       }''')
       print(result)

#await browser.close()
asyncio.get_event_loop().run_until_complete(main())

更多的内容可以在作者的知识星球进一步交流

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无界社区mixlab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Pyppeteer抓取渲染网页
GitHub地址是:https://miyakogi.github.io/pyppeteer
SeanCheney
2019/01/28
6.9K0
使用Pyppeteer抓取渲染网页
别只用 Selenium,新神器 Pyppeteer 绕过淘宝更简单!
如果大家对 Python 爬虫有所了解的话,想必你应该听说过 Selenium 这个库,这实际上是一个自动化测试工具,现在已经被广泛用于网络爬虫中来应对 JavaScript 渲染的页面的抓取。
崔庆才
2019/05/06
6K0
别只用 Selenium,新神器 Pyppeteer 绕过淘宝更简单!
Python爬虫神器pyppeteer,对 js 加密降维打击
pyppeteer 是对无头浏览器 puppeteer的 Python 封装。无头浏览器广泛用于自动化测试,同时也是一种很好地爬虫思路。
一墨编程学习
2019/06/15
3.2K0
使用pyppeteer淘宝登录
现在淘宝的商品搜索页必须要登录才能见,所以必须要cookies才能进行下一步操作。本期介绍如何使用pyppeteer登录淘宝,获取Cookies。
小歪
2019/03/07
3.1K0
web自动化|pyppeteer的使用-python版本puppeteer
pyppeteer:puppeteer的非官方python库.支持python3.5|3.6|3.7
测试邦
2019/09/10
3.1K0
web自动化|pyppeteer的使用-python版本puppeteer
Pyppeteer Python加载扩展及示例
Pyppeteer 是一个 Python 库,可以控制无头 Chrome 或 Chromium 浏览器,并在网页加载过程中加载扩展来增强浏览器功能。Pyppeteer 提供了一个 API,让您可以与无头浏览器交互,完成网页抓取、自动化测试、网页截图或 PDF 生成等任务。加载扩展的功能可以让您在浏览器导航到网页时,运行自定义的 JavaScript 代码,从而改变浏览器的行为。您可以在页面加载之前对页面进行操作,例如修改 DOM(文档对象模型)、拦截网络请求、注入其他脚本等。一些常见的加载扩展的用例有:
jackcode
2023/06/13
5780
Pyppeteer Python加载扩展及示例
微软开源的浏览器自动化工具-Playwright
软开源了一个 Python 项目:Playwright,从此又多了一个浏览器自动化工具。之前一直用 selenium 或 splinter。
somenzz
2020/11/25
1.6K0
微软开源的浏览器自动化工具-Playwright
如何用Pyppeteer打造高并发无头浏览器采集方案
以下文章将从行业痛点出发,结合 Pyppeteer 高并发无头浏览器技术,讲解如何在 Python 中打造一个可配置代理的高效采集方案,以采集 Amazon 今日特价商品并分析优惠价格与评分。文章按照“行业问题 → 技术灵感 → 构思实现 → 验证实验 → 潜在价值”五大板块展开,代码示例中集成了爬虫代理,并附有详尽注释,帮助读者快速上手。
jackcode
2025/05/12
2031
如何用Pyppeteer打造高并发无头浏览器采集方案
Python抓取Google Trends(谷歌指数)
GitHub上的pytrends项目(https://github.com/GeneralMills/pytrends)也可以用来抓取,但是获取分数的请求url年久失修,不能获取到数据,其它比如获取相关词是好的。
SeanCheney
2019/03/08
3.2K0
Python抓取Google Trends(谷歌指数)
如何解决selenium被检测,实现淘宝登陆
因为不少大网站有对selenium的js监测机制。比如:navigator.webdriver,navigator.languages,navigator.plugins.length……
十四君
2019/11/28
4.8K0
pyppeteer_stealth隐藏pyppeteer特征天花板神器
第一眼看也能猜出来是干啥的, 就是用来隐藏pyppeteer特征的, 话不多说, 直接开干, 来测一下就知道它的神奇之处了
不止于python
2022/12/18
8770
pyppeteer_stealth隐藏pyppeteer特征天花板神器
Pyppeteer与selenium的区别及示例
Pyppeteer和selenium都是用于浏览器自动化的工具,可以用来测试、爬取或操作网页。它们都支持多种编程语言,可以跨平台运行,并提供了丰富的API和文档。
jackcode
2023/05/22
1.4K0
Pyppeteer与selenium的区别及示例
使用Pyppeteer进行gmail模拟登录
参考来源: https://zhuanlan.zhihu.com/p/53700650 https://blog.csdn.net/Chen_chong__/article/details/82950968
hankleo
2020/09/17
1.3K0
一周一技 | 不注入JS怎么防止Pyppeteer被反爬?
在我以前的一篇文章:一日一技:如何正确移除Selenium中window.navigator.webdriver的值,我讲到了如何在Selenium启动的Chrome中,通过设置启动参数隐藏 window.navigator.webdriver,驳斥了网上垃圾文章中流传的使用JavaScript注入的弊端。
咸鱼学Python
2019/08/20
6.1K2
一周一技 | 不注入JS怎么防止Pyppeteer被反爬?
puppeteer使用指南-入门
上篇文章讲解了如何安装puppeteer,这篇文章我们通过几个小案例来了解一下puppeteer的常用api的使用方法。
挥刀北上
2021/02/02
2.8K0
puppeteer使用指南-入门
微软推出的浏览器自动化工具 playwright
提供同步(阻塞)API 和异步 API。它们在功能方面是相同的,并且仅在使用 API 的方式上有所不同。
叉叉敌
2021/12/06
4660
在Pyppeteer中正确隐藏window.navigator.webdriver
(文末福利)在我以前的一篇文章:一日一技:如何正确移除Selenium中window.navigator.webdriver的值,我讲到了如何在Selenium启动的Chrome中,通过设置启动参数隐藏 window.navigator.webdriver,驳斥了网上垃圾文章中流传的使用JavaScript注入的弊端。
青南
2019/08/20
3.9K0
在Pyppeteer中正确隐藏window.navigator.webdriver
python-pyppeteer模块使用汇总
一.简单代码示例 import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() #打开一个新页面 await page.goto('https://www.baidu.com/') #访问百度 await page.screenshot({'path': 'baidu.png'}) #截图并存
小小咸鱼YwY
2020/06/19
2.5K0
Python实战之数据表提取和下载自动化
在网络爬虫领域,动态渲染类型页面的数据提取和下载自动化是一个常见的挑战。本文将介绍如何利用Pyppeteer库完成这一任务,帮助您轻松地提取动态渲染页面中的数据表并实现下载自动化。
华科云商小徐
2023/08/29
4690
在Pyppeteer中实现反爬虫策略和数据保护
爬虫是我们获取互联网数据的神奇工具,但是面对越来越严格的反爬虫措施,我们需要一些我们获取数据的利器来克服这些障碍。本文将带您一起探索如何使用Pyppeteer库来应对这些挑战。
小白学大数据
2023/09/26
4940
相关推荐
使用Pyppeteer抓取渲染网页
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档