selenium多实例爬虫的忠告和参数配置

news/2024/10/18 6:12:41/

使用多进程

加快爬虫速度的方法有几种,异步,多线程,多进程和分布式,不管是哪种都会用到多实例。这几种方法中,只有多进程适合selenium,selenium本身不支持异步,多线程曾经尝试过似乎有问题。

采用哪种框架

单线程爬虫本身很简单,而大规模的分布式多进程爬虫就比较复杂,Scrapy这种简单的框架拿来学习用或者做简单事情够用了,真实的需求往往比较复杂,需要大量定制,需要对Scrapy非常了解,与其被Scrapy这个框框限制住,不如自己写。没有完全通用的框架,爬虫共通的部分只有URL去重,除非有非常适合需求的框架,否则不如自己写。如果是大规模分布式多进程爬虫,可以采用celery来做分布式框架,爬虫自己写。

采用哪个平台

windows和linux都使用过,个人建议使用linux,windows上感觉有内存泄漏,爬虫跑多了会内存不足,还有一个重要原因是linux可以使用docker,docker绝对是安装开发部署的利器,测试环境更是必备。

采用哪个语言

其实哪个语言都可以开发爬虫,要省事建议采用主流语言python,开发随大流非常重要,如果你选择冷僻的语言就意味着你一个独自前行,选择主流语言就意味着有很多人与你同行,给你帮助。当然C#,java也算是主流,其他的不建议选择。

要注意内存泄漏

大规模爬虫要爬成千上万的网页,稳定性和坚固性非常重要。chromedriver和chrome都是爬虫的子进程,用windows平台的时候常常出现爬虫终了了,但是chromedriver,chrome进程残留的情况。linux似乎没有出现,为了预防万一,爬虫退出前杀死一下自己的子进程更安全。

比如说退出时采用这种代码,确保没有内存泄漏。

        if driver is not None:try:driver.quit()except:pass# 杀死所有子进程(如果chrome还有残留)os.system('pkill -P%s -9'%(os.getpid(),))

下面说是selenium多实例爬虫的参数配置

    options = webdriver.ChromeOptions()# 必须是headless=new,否则download.default_directory不起作用options.add_argument('--headless=new')# 下面这些参数是必须的,否则可能出错options.add_argument('--disable-gpu')options.add_argument('--no-sandbox')options.add_argument('--disable-dev-shm-usage')# 替换User-Agentoptions.add_argument(f'user-agent={user_agent}')options.add_argument('--proxy-server=192.168.100.xx:24000')# 最坑的设置,对于并行爬虫是必须的options.add_argument(f'--user-data-dir={userdir}')options.add_argument(f"--remote-debugging-port={port}")# 使用大容量缓存,减少流量options.add_argument('--disk-cache-size=2000000000')# 下面这些参数估计没有啥作用,暂时保留options.add_argument('--disable-setuid-sandbox')options.add_argument("--start-maximized")options.add_argument("--disable-infobars")options.add_argument("--disable-extensions")# 设置下载文件目录为不存在的目录,使其无法下载,估计设置prefs = {'download.default_directory': '/tmp/download'}options.add_experimental_option('prefs', prefs)

 这个设置是踩过无数坑的血泪经验,代码有注解,只对其中最坑的配置说明一下

    options.add_argument(f'--user-data-dir={userdir}')
    options.add_argument(f"--remote-debugging-port={port}")


这2参数个必须设置成每个进程不一样,使各个进程之间完全隔离,很多单线程爬虫没有提到这2个参数,如果不设置就会有各种稀奇古怪的错误和无尽的烦恼。关键是这些错误都不容易再现,往往爬了很多网后才出现,而错误信息往往把你带偏,不知道真实的原因所在。

比如说

org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn’t exist

这个错误的意思可以理解为可用端口耗尽,如果不知道端口,那么webdriver每次就会新返回一个端口,旧的端口没有被复用被抛弃,由于端口是有限的,所以跑了很多网后就会出错。


http://www.ppmy.cn/news/58095.html

相关文章

【算法】九键输入法

题目: 输入数字字符串, 输出这串字符对应的九键输入法有可能出现的所有情况 算法: 定义了一个全局变量 g_numStr,其中存储了每个数字对应的字母。定义了一个递归函数 str_combine,用于将每个数字对应的字母进行组合。str_combin…

自动驾驶TPM技术杂谈 ———— I-vista验收标准(试验规程)

文章目录 术语介绍试验准备场地要求环境要求精度要求边界车辆&路沿石 试验方法能力试验双边界车辆平行车位白色标线平行车位双边界车辆垂直车位白色标线垂直车位方柱垂直车位双边界车辆斜向车位白色标线斜向车位 新功能评价平行车位远程操控泊入泊出试验垂直车位远程操控泊…

无损以太网与网络拥塞管理(PFC、ECN)

无损以太网 无损以太网(Lossless Ethernet)是一种专门用于数据中心网络的网络技术,旨在提供低延迟、高吞吐量和可靠性的传输服务。它是在传统以太网的基础上进行了扩展,引入了新的拥塞管理机制,以避免数据包丢失和网络…

前端存储 Cookie、Web Storage(localStorage 与 sessionStorage)

cookie 由来:cookie 最初的目的是为了维持前端存储的临时状态而产生的。原理: 浏览器发出无状态请求服务器返回响应,携带 cookie 信息浏览器发出接口请求,携带 cookie 信息之后就是前端与服务器建立完成连接后的接口返回了 生成机…

浅聊AIOT

引言 IoT是(Internet of Things)的简称,也就是人们常说的物联网;随着智能硬件的发展和推广,制造成本也随之下降,很多的厂家也慢慢地拥抱网络互联,逐步实现设备互联,也就进入了人们常说的万物互联时代。虽然…

IDEA常用提升效率的操作小记

IDEA目前是使用最广泛的Java开发工具之一了,虽然是收费的,但是也提供了免费的社区版,并且收费版也支持使用github的开源项目,使用免费license,虽然每年都要续,我用的就是开源项目申请的免费license。 开发…

FM33A048B I2C

I2C 模块实现MCU 与外部I2C 接口器件之间的同步通信,硬件实现串并转换。支持I2C 的主机模式,不支持从机模式和多主机模式。 特点: ⚫ 只支持I2C 主机模式, 不支持从机模式和多主机模式 ⚫ 支持7 位或10 位从机地址 ⚫ 传输速度支持标准模式(1…

亚马逊云科技赋能客户,为海思科打造安全高效的营销业务中台系统

羽翼渐丰,翱翔云端 携手亚马逊云科技,打造互联网级企业解决方案 秉承“为客户创造价值”的理念,在公司发展过程中,博智信息先后服务了众多知名企业,客户行业覆盖制造、零售、餐饮、科技、电子等。经过近20年的发展&a…