《封号码罗》python爬虫之pyppeteer异步爬虫初体验(八)

《封号码罗》python爬虫之10行代码破解网页动态反爬虫(二) 网页异步动态反爬虫,就是数据不在HTML的原始文件中,而是通过ajax等技术,异步获取数据并且渲染到页面上的,有的时候,我们可以直接分析出异步接口,通过直接请求接口获取数据,但是遇到加密复杂的接口,可能破解起来比较消耗时间,这个时候我们就可以借助动态渲染的工具,如selenium,pyppeteer,或者splash等等。 三个工具都可以实现动态页面的渲染,但是三个工具在使用时有明显的区别: se... 阅读详情

如果网页的内容是ajax异步加载的,恰好接口又是加密的,为了快速实现爬取数据,首先考虑到的是selenium,但是selenium还要配置谷歌浏览器,谷歌驱动等等,如果要部署或者迁移到其他设备上再去执行,环境配置就是必不可少的,遇见问题,可能半个小时就过去了,如果用pyppeteer完全不用考虑环境配置的问题,程序会自动加载所需要的环境,配合asyncio使用之后,爬取速度起飞,毕竟异步爬取秒同步爬取分分钟的事儿
对于已知道爬取上限的网站来说很实用,但是对于需要判断是否有下一页的网站来说就略有不足,这里仅仅是学习体验一波,毕竟scrapy异步框架,还是值得信赖的,在scrapy里面的中间件中,可以使用pyppeteer加载ajax,不管是爬取还是保存,在不同的文件中配置,这一点是我最喜欢的。

import asyncio

import pyppeteer
from pyppeteer import launch
from pyquery import PyQuery as pq

# 官方文档
# https://miyakogi.github.io/pyppeteer/reference.html

url = "https://dynamic2.scrape.center/"


# 粒子01
async def main1():
    # launch 方法会新建一个 Browser 对象,其执行后最终会得到一个 Browser 对象,
    # 然后赋值给 browser。这一步就相当于启动了浏览器
    browser = await launch()
    # 然后 browser 调用 newPage  方法相当于浏览器中新建了一个选项卡,同时新建了一个 Page 对象,
    # 这时候新启动了一个选项卡,但是还未访问任何页面,浏览器依然是空白
    page = await browser.newPage()
    # 随后 Page 对象调用了 goto 方法就相当于在浏览器中输入了这个 URL,浏览器跳转到了对应的页面进行加载。
    await page.goto(url)
    # Page 对象调用 waitForSelector 方法,传入选择器,那么页面就会等待选择器所对应的节点信息加载出来,
    # 如果加载出来了,立即返回,否则会持续等待直到超时。此时如果顺利的话,页面会成功加载出来。
    await page.waitForSelector(".item .name")
    # 页面加载完成之后再调用 content 方法,可以获得当前浏览器页面的源代码,这就是 JavaScript 渲染后的结果。
    doc = pq(await page.content())
    # 然后进一步的,我们用 pyquery 进行解析并提取页面的电影名称,就得到最终结果了。
    names = [item.text() for item in doc(".item .name").items()]
    print("Names: ", names)
    await browser.close()


# asyncio.get_event_loop().run_until_complete(main1())

# 粒子02
width, height = 1366, 768


async def main2():
    # browser = await launch(headless=False)  # 有界面的,创建一个空白的浏览器
    # browser = await launch(devtools=True)  # 有界面的,创建一个空白的浏览器,右侧直接打开调试工具
    # browser = await launch(headless=False, args=["--disable-infobars"])  # 有界面的,创建一个空白的浏览器,右侧直接打开调试工具
    # 使得浏览器的窗口和打开的标签内的网页大小一致
    # browser = await launch(headless=False,
    #                        args=["--disable-infobars", f'--window-size={width},{height}'])  # 有界面的,创建一个空白的浏览器,右侧直接打开调试工具
    # userDataDir读取本地浏览器配置信息,可以缓存cookies,再次运行程序会读取这些配置
    browser = await launch(headless=False, userDataDir='./userdata', args=['--disable-infobars'])
    # browser = await launch()

    # 无痕模式 使用context对象创建page选项卡
    # context = await browser.createIncognitoBrowserContext()
    # page = await context.newPage()

    page = await browser.newPage()
    # 防止浏览器检测webdriver
    await page.evaluateOnNewDocument('Object.defineProperty(navigator, "webdriver", {get: () => undefined})')
    await page.setViewport({"width": width, "height": height})  # 设置窗口大小
    await page.goto(url)
    await page.waitForSelector(".item .name")
    await asyncio.sleep(2)
    await page.screenshot(path="example.png")
    dimensions = await page.evaluate("""() => {
        return {
            width: document.documentElement.clientWidth,
            height: document.documentElement.clientHeight,
            deviceScaleFactor: window.devicePixelRatio,
        }
    }""")
    print(dimensions)  # {'width': 1366, 'height': 768, 'deviceScaleFactor': 1} 网页宽高和像素
    await browser.close()


#
#
# asyncio.get_event_loop().run_until_complete(main2())


# 粒子03 Page选择器
async def main3():
    browser = await launch()
    page = await browser.newPage()
    await page.goto("https://dynamic2.scrape.center/")
    await page.waitForSelector(".item .name")
    #  J 方法传入一个选择器 Selector,则能返回对应匹配的第一个节点,等价于 querySelector。
    #  如 JJ 方法则是返回符合 Selector 的列表,类似于 querySelectorAll。
    j_result1 = await page.J(".item .name")
    j_result2 = await page.querySelector(".item .name")
    jj_result1 = await page.JJ(".item .name")
    jj_result2 = await page.querySelectorAll(".item .name")
    print("J Result1:", j_result1)
    print("J Result2:", j_result2)
    print("JJ Result1:", jj_result1)
    print("JJ Result2:", jj_result2)
    await browser.close()


# asyncio.get_event_loop().run_until_complete(main3())


# 粒子04 选项卡操作
async def main4():
    browser = await launch(headless=False)
    page = await browser.newPage()
    await page.goto("https://www.baidu.com")
    page = await browser.newPage()
    await page.goto("https://www.bing.com")
    pages = await browser.pages()  # 获取所有选项卡
    print("Pages:", pages)
    page1 = pages[1]  # 选择准备切换到的选项卡
    await page1.bringToFront()  # 切换到对应的选项卡
    await asyncio.sleep(10)


# asyncio.get_event_loop().run_until_complete(main4())

# 粒子05 page页面常规操作
async def main5():
    browser = await launch(headless=False)
    page = await browser.newPage()
    await page.goto('https://dynamic1.scrape.center/')
    await page.goto('https://dynamic2.scrape.center/')
    await page.goBack()  # 后退
    await page.goForward()  # 前进
    await page.reload()  # 刷新
    await page.pdf()  # 保存pdf
    await page.screenshot()  # 截图
    await page.setViewport("<h2>Hello World</h2>")  # 设置页面HTML
    await page.setUserAgent("python")  # 设置ua
    await page.setExtraHTTPHeaders(headers={})  # 设置headers
    await page.close()  # 关闭
    await browser.close()


# asyncio.get_event_loop().run_until_complete(main5())

# 粒子06 模拟点击操作
async def main6():
    browser = await launch(headless=False)
    page = await browser.newPage()
    await page.goto("https://dynamic2.scrape.center/")
    await page.waitForSelector(".item .name")
    await page.click(".item .name", options={
        "button": "right",  # 鼠标按钮,分为 left、middle、right
        "clickCount": 1,  # 1或2 双击、单击
        "delay": 3000  # 毫秒 延迟点击
    })
    # await page.type('#q', 'iPad')  # 定位 输入文本  如send_keys,这里是type方法
    # print('HTML:', await page.content())  # 获取整个网页源代码,需要配合pq解析
    # print('Cookies:', await page.cookies())   # 获取cookies
    await browser.close()


asyncio.get_event_loop().run_until_complete(main6())
# 除了 waitForSelector 方法,还有很多其他的等待方法,介绍如下。
# waitForFunction:等待某个 JavaScript 方法执行完毕或返回结果。
# waitForNavigation:等待页面跳转,如果没加载出来就会报错。
# waitForRequest:等待某个特定的请求被发出。
# waitForResponse:等待某个特定的请求收到了回应。
# waitFor:通用的等待方法。
# waitForSelector:等待符合选择器的节点加载出来。
# waitForXPath:等待符合 XPath 的节点加载出来。
# 通过等待条件,我们就可以控制页面加载的情况了。

Scrapy框架介绍之Puppeteer渲染 1、Scrapy框架 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。 Scrapy 使用了 Twisted’twɪstɪd异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。 Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloa 阅读详情

相关推荐

Scrpay-动态页面爬取

Scrapy 使用2.0 动态页面处理 Scrapy发起Request后,返回的response中往往包含了结果。如今,越来越多的网页变为经过JavaScript渲染的页面,Scrapy可以和Selenium或者Pyppeteer这类库融合使用来实线渲染页面的抓取。 案例: 实例网站: https://dynamic5.scrape.center/ 该示例网站带分页功能,只需要在URL上加上/page/页码就可以跳转到下一页。 新建项目: scrapy startproject scrapypyppetee

wuyangcc的博客 467

Scrapy 和 Pyppeteer 更优雅的对接方案

“ 阅读本文大概需要 3 分钟。 ”现在越来越多的网页都已经演变为 SPA 页面,而且越来越多的网站采用了各种 JavaScript 混淆和加密技术,这使得 JavaScript 逆向难...

静觅 4501

【爬虫渲染神器】selenium 和pyppeteer 的动态渲染ajax反爬虫

许多网页是动态加载的网页,其中不乏使用了ajax异步技术,那么我们有没有一种渲染工具,直接省略分析过程,模拟浏览器渲染的操作呢,获取到我们想要的内容。当然有,下面我们介绍两种渲染工具的实战使用。 目标网站: http://www.porters.vip/verify/sign/ 点击参看详情页的里面内容。 前一篇文章,我们介绍了,js逆向分析两种方法,也是能获取详情页,今天我们依然介绍两种渲染神器,也能获取详情页的内容。 神器一:selenum # -*- coding: utf-8 -*- from s

赖德发的博客 1108

Scrapy--Pyppeteer爬取加密网站01

F12 检查页面 ——> 点击network,切换页面,发现加载出部分数据,点击第一条数据查看headers Request URL: https://spa6.scrape.center/api/movie?limit=10&offset=10&token=MjEzMmE3MTIxOTdjNzEzNWQyMzc5OWVmN2U1MjYxNGYxZmRkNWM0ZSwxNjU1ODYwOTEw 这一串为加密字符:token=MjEzMmE3MTIxOTdjNzEzNWQyMzc5OWVmN2U1MjYxN

weixin_44826986的博客 1603

Python爬虫实战:基于最新技术的电话号码高效提取系统

本文将详细介绍如何使用Python最新技术构建一个高效、稳定的电话号码提取爬虫系统。我们将从爬虫基础讲起,逐步深入到异步IO、机器学习验证、反反爬策略等高级话题,并提供一个完整的、可直接运行的电话号码提取爬虫实现方案。关键词:Python爬虫、电话号码提取、异步IO、反反爬、正则表达式、机器学习验证网络爬虫(Web Crawler)是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。随着大数据时代的到来,爬虫技术在各个领域都发挥着重要作用,如舆情监控、市场分析、数据挖掘等。

2201_76125261的博客 1608

scrapy-pyppeteer:Scrapy的Pyppeteer集成

未维护 如果您需要Scrapy的浏览器集成,请考虑使用 Scrapy的Pyppeteer集成 该项目提供了一个Scrapy下载处理程序,该处理程序使用执行请求。 它可用于处理需要JavaScript的页面。 该软件包不会干扰常规的Scrapy工作流程,例如请求计划或项目处理。 动机 在发行后,其中包括部分和实验性,Scrapy允许集成基于asyncio的项目,例如Pyppeteer 。 要求 Python 3.6+ Scrapy 2.0+ 皮皮特0.0.23+ 安装 $ pip install scrapy-pyppeteer 配置 通过替换默认的http和https下载处理程序: DOWNLOAD_HANDLERS = { "http" : "scrapy_pyppeteer.handler.ScrapyPyppeteerDownloadHandler" , "h

使用Pupeteer写一个自动化测试用例

Pupeteer就是那个著名的无头浏览器了,它能做的事情很多,什么爬虫,自动化测试用例不在话下。这里写了一个简单的测试用例没有搞太复杂,仅供参考: 项目地址:https://github.com/yafully/autotest 具体操作流程是:登录-选择指定产品-加入购物车-结算 代码如下:抽象一个初始化公共类 const puppeteer = require('puppeteer'...

Yafully 678

ScrapyPyppeteerDeprecated:Scrapy Pyppeteer演示

ScrapyPyppeteer Scrapy Pyppeteer演示 跑步 scrapy crawl quotes

《封号码罗》python爬虫之pyppeteer异步爬虫牛刀小试(九)

import json import logging from pyppeteer import launch from pyppeteer.errors import TimeoutError import asyncio from os import makedirs from os.path import exists logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s: %(message)s")

Python_DJ的博客 355

python爬虫神器Pyppeteer入门及使用

主要介绍了python爬虫神器Pyppeteer入门及使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

vscode+keil嵌入式软件开发全流程

vscode+keil嵌入式软件开发全流程

AspringQ的博客 6777

【爬虫&APP逆向007】pyppeteer操作和scrapy基本介绍

异步的selenium。在 Pyppetter的背后是有一个类似 Chrome 浏览器的 Chromium 浏览器在执行一些动作进行网页渲染,首先说下 Chrome 浏览器和 Chromium 浏览器的渊源。Chromium 是谷歌为了研发 Chrome 而启动的项目,是完全开源的。

初遇我ㄖ寸の热情呢? 1696

基于opencv-ANN的水果识别模型训练

本文通过opencv-ann-mlp训练模型,实现对五种水果进行分类识别。本文详细介绍该项目的各个过程,包括数据准备、预处理、样本读取、训练数据集制作、训练标签制作、模型参数设置、模型训练,模型测试验证等,总结该过程需要注意的事项。

qq_15985873的博客 3971

python使用scrapy-pyppeteer中间件使用代理IP

【代码】python使用scrapy-pyppeteer中间件使用代理IP。

Z_suger7的博客 1067

Lama:基于傅立叶卷积的分辨率鲁棒性大掩模修复

为了缓解修复网络和损失函数都缺乏有效的感受野这个问题,提出了大掩模修复(LaMa)。LaMa基于一种新的修复网络架构,该架构使用快速傅立叶卷积(FFC),具有图像范围的感受野;高感受野感知损失;大型训练掩码,释放前两个组件的潜力。

qq_44926214的博客 1416

各种逻辑漏洞

注册:短信轰炸验证码安全问题密码爆破邮箱轰炸用户任意注册、批量注册用户名枚举XSS(有框的地方就可以尝试插XSS)登录:短信轰炸、验证码安全问题、密码爆破、邮箱轰炸SQL注入撞库抓包把password字段修改为空值发送认证凭证替换、比如返回的数据包中包含账号,修改账号就能登录到其他账号Cookie仿冒修改返回包的相关数据,可能会登陆到其他的用户找回密码:短信邮箱轰炸、短信邮箱劫持重置任意用户账户密码、验证码手机用户未统一验证直接跳过验证步骤。

shirlly_的博客 2091

pyppeteer与scrapy的整合

与scrapy的整合 加入downloadmiddleware Python from scrapy import signals from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware impo...

从零开始学习python --zeropython 1635

YOLOv11 改进 - 注意力机制 | HaloNet 局部自注意力 (Local Self-Attention) 以分块交互策略实现高效全局上下文建模

本文介绍了局部自注意力机制(HaloAttention)在YOLOv11中的结合应用。局部自注意力通过关注输入数据局部区域来捕捉特征关系,能降低计算复杂度、增强局部特征捕捉,且可与CNN结合。其计算时先定义局部窗口,再计算注意力权重并加权求和。我们将HaloAttention集成到YOLOv11的检测头中,并进行相关注册和配置。实验表明,改进后的模型在目标检测和实例分割等任务中表现更佳,证明了自注意力模型在传统卷积主导领域的有效性。

魔改工程师的博客 1139

用python和scrapy实现基本爬虫功能

用python实现爬虫 一、安装 pip install Scrapy 安装后,只要在命令终端输入 scrapy,提示类似以下结果,代表已经安装成功。 二、新建项目(scrapy startproject) 在开始爬取之前,必须创建一个新的Scrapy项目。进入自定义的项目目录中,运行下列命令: scrapy startproject mySpider 三、设置生成样式(mySpider/items.py) 我们打算抓取 http://www.itcast.cn/channel/teacher.shtml

qq_42804657的博客 311

基于YOLOv8的城市违建识别系统:从数据集构建到UI界面实现

YOLOv8是Ultralytics公司于2023年推出的最新一代YOLO(You Only Look Once)系列目标检测算法。更高效的骨干网络设计改进的锚框机制更精确的损失函数支持分类、检测、分割等多任务YOLOv8特别适合像违建识别这样的实时检测任务,能够在保持高精度的同时实现快速推理。

YOLO 673

《C#零基础入门之百识百例》(七)算数运算符 -- 圆的面积

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,本文带你学习C# 中算数运算符。

陈言必行 -- Unity游戏开发领域优质博主 3611

远程启动scrapy pyppeteer 报错

MaxRetryError: HTTPSConnectionPool(host='storage.googleapis.com', port=443): Max retries exceeded with url: /chromium-browser-snapshots/Linux_x64/575458/chrome-linux.zip (Caused by SSLError(SSLError("...

0x8g1T9E- 5531

【即插即用模块】注意力篇 | TGRS 2025 | ASD:自适应频域解耦,动态拆分高低频+空间注意力,频域空间特征双增强!

摘要: FDMF-Net提出了一种频域解耦多模态融合网络,核心组件为振幅谱解耦模块(ASD)。ASD通过自适应频域拆分和频域-空域协同增强,有效分离模态不变与模态特定特征。该模块利用MLP学习动态阈值调整高低频比例,并通过空间注意力分别强化频域特征,在遥感语义分割任务中实现了细节与结构的协同增强。实验表明,ASD模块能减少模态内冗余,提升特征判别性,为多模态数据融合提供了新思路。代码已开源,适用于需要强化细节与结构的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 304

pyppeteer 开发记录

不管怎么对 selenium 的 webdriver 标识进行防御,selenium 爬取还是被识别了。。原因是 selenium 唤起浏览器需要通过 chromedriver.exe / geckodriver.exe 来唤起 谷歌 / 火狐,恰恰就是这些驱动导致 selenium 被识别,好家伙,反爬直接给你釜底抽薪了。网上也有去掉 webdriver 标识并反编译的 chromedriver...

weixin_44268101的博客 331

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

利用pyppeteer自动购买某麦网演唱会门票

此篇文章主要是为了教大家如何使用pyppeteer,切勿用于非法用途,否则后果自负! 回归正题!今天猫哥要讲的内容是,利用pyppeteer购买某麦网演唱会门票。作为技术交流,猫哥只实现了基本的功能! 实现原理:首先,我们无需破解其登录,直接通过手机扫码进入主页面。其次,通过访问我们的目标网址(也就是,我们想要抢的那场票。例如:抢刘德华的票,那么目标网址就直接定位到刘德华的预定页面)。然后,通过不...

大数据-攻城狮 2142

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

《封号码罗》python爬虫之企某科技网站js逆向(十四)

首先查看ajax加载,可以发现,其所有的数据都是加密方式到前端页面,由前端页面js解密之后再渲染到网页中 根据其关键字 encrypt_data进行全局搜索,寻找js的解密代码 这个地方就是解密代码,但是这里仅仅是调用,所以要进到代码里面去查看 看到这里已经发现t已经是ajax请求过来的数据了,然后是json被返回,所以重点分析这个区域的代码,可以看到,只有a.a.decode(t)调用了t,所以这个地方需要生成两个函数,一个是s,另一个是其包含的这个函数,其他都是固定的字符串,扣下来js直接调用就行

Python_DJ的博客 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 《封号码罗》python爬虫之JS逆向入门某道翻译(七)
下一篇: 《封号码罗》python爬虫之pyppeteer异步爬虫牛刀小试(九)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值