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

ops/2024/9/24 23:23:07/

要提高scrapy-pyppeteer的效率,可以考虑以下几个方面:

  • 减少不必要的页面操作,如滚动、点击等,只执行对数据抓取有用的操作。
  • 使用pyppeteer_page_coroutines参数传入一个可排序的迭代器(如列表、元组或字典),指定在返回响应之前需要在页面上执行的协程。这样可以避免多次调用page.evaluate方法。
  • 设置合理的并发数和下载延迟,避免过多的请求导致浏览器崩溃或被目标网站封禁。
  • 使用缓存或增量爬取,避免重复爬取相同的页面。
python"># settings.py
# -*- coding: utf-8 -*-Sydney = 'scrapy_pyppeteer'SPIDER_MODULES = ['scrapy_pyppeteer.spiders']
NEWSPIDER_MODULE = 'scrapy_pyppeteer.spiders'# 设置下载中间件
DOWNLOADER_MIDDLEWARES = {'scrapy_pyppeteer.middlewares.PyppeteerMiddleware': 543,'scrapy_pyppeteer.middlewares.RandomUserAgentMiddleware': 544,
}# 设置请求头
DEFAULT_REQUEST_HEADERS = {'Accept': '*/*','Accept-Language': 'en',
}# 设置日志级别
LOG_LEVEL = "DEBUG"# 设置pyppeteer启动选项
PYPPETEER_LAUNCH_OPTIONS = {# 是否显示浏览器界面,默认False"headless": False,# 是否忽略HTTPS错误,默认False"ignoreHTTPSErrors": True,# 添加代理服务器的地址,格式为host:port或protocol://host:port"args": ["--proxy-server=www.16yun.cn:31111"]
}# 设置并发数,默认16
CONCURRENT_REQUESTS = 8# 设置下载延迟,默认0秒
DOWNLOAD_DELAY = 1# 启用缓存,默认False
HTTPCACHE_ENABLED = True
python"># middlewares.py
# -*- coding: utf-8 -*-
import asyncioimport pyppeteerfrom scrapy import signals, Request, Spider, httpclass PyppeteerMiddleware:# 定义一个类属性browser,表示浏览器对象browser: pyppeteer.browser.Browser@classmethoddef from_crawler(cls, crawler):# 创建中间件实例,并传入crawler对象作为参数

http://www.ppmy.cn/ops/3279.html

相关文章

JAVA Stream流

Stream流 是Java 8引入的一种处理数据的强大工具,它提供了一种声明式、高效且易于并行化的编程模型,用于对集合、数组或其他数据源中的元素进行各种计算和操作。Stream API的核心思想是将数据作为一系列元素的序列(流)进行处理&a…

【计算机毕业设计】点餐平台网站——后附源码

🎉**欢迎来到琛哥的技术世界!**🎉 📘 博主小档案: 琛哥,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 琛哥在深度学习任务中展现出卓越的能力&a…

10、【代理模式】通过引入一个代理对象来控制对原始对象的访问的方式。

你好,我是程序员雪球。 今天我们了解代理模式的原理、静态代理和动态代理的区别、Spring AOP 和动态代理的关系、代理模式的使用场景,以及用 Java 实现一个动态代理示例 一、代理模式的原理 代理模式是一种设计模式,它提供了一种通过引入一个…

C++|list的模拟实现

C|list的模拟实现 前言ListNodelistlist的尾插操作list的尾删 list的迭代器代码实现 list的其他操作inserterase const迭代器 前言 我们模拟实现的list是带头双向循环链表,list的成员变量有指向头节点的指针。所以在实现list之前我们应该实现节点这个类型 ListNod…

设计模式之工厂模式

工厂模式是一种创建型设计模式,其核心思想是定义一个创建对象的接口(即工厂),让子类决定实例化哪一个类。工厂模式将对象的创建与使用分离,使代码更易于维护和扩展,尤其在需要根据条件动态创建不同类的实例…

JavaScript函数⭐

一,函数的使用 1.1函数的定义 函数就是封装了一段可以被重复执行的代码块 目的:让大量代码重复使用 1.2封装 函数的封装是把一个或多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口 封装类似于把电脑配件整合组装到机箱中…

AI:162-如何使用Python进行图像识别与处理深度学习与卷积神经网络的应用

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正…

顺序表链表经典算法题

1.链表反转 typedef struct ListNode listnode; struct ListNode* reverseList(struct ListNode* head) {if(head NULL){return head;}listnode* p1 NULL;listnode* p2 head;listnode* p3 head->next;while(p2){p2->next p1;p1 p2;p2 p3;if(p3)p3 p3->next;}…