余利区

 找回密码
 立即注册
查看: 67|回复: 0

网络爬虫和网络数据管理的常见问题集合

[复制链接]

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-5 14:18:34 | 显示全部楼层 |阅读模式
网络爬虫从业者的一些常见问题:

  • OCR 爬虫开发成本高不高?
  • Selenium 会被直接检测出来吗?
  • Puppeteer-extra-plugin-stealth 会被检测出来吗?
  • 最高强度的爬虫对抗手段是什么?
  • 爬虫违法吗?
  • 爬虫的难点到底在哪里?
  • 爬虫到底有哪些应用场景?
  • 网络爬虫用什么编程比较好呢?
  • 有没有解决上面问题的方案?
问:网络爬虫是一种什么样的技术?

答:网络爬虫是替代人工从互联网采集数据的技术。不同的数据有不同的获取方式。

  • 有些数据可以通过发送最简单的 HTTP 请求直接获得
  • 有些数据需要模拟页面访问的上下文场景后,通过 HTTP 请求获得
  • 更多的数据则需要通过真实的浏览器访问后才能获得
在解决了“通过编程获取一个网页数据”的问题后,就需要把这个问题规模化和系统化,从而解决实际问题,这包括:

  • 连续采集
  • 大规模分布式
  • 任务调度
  • 性能保证
  • 数据质量保证
  • 系统架构设计
  • API 设计
  • 机器人流程自动化(RPA)
  • 高级数据采集语言
  • 高级信息提取算法
  • 增强分析
  • 机器学习
  • 弹性计算
  • 云化服务
  • 存储处理
  • 运维工具
  • 降低数据获取成本
  • 降低团队技能要求
  • 提高数据规模
  • 解决数据融合
  • 提升时效价值
  • 提高系统可维护性
问:OCR 爬虫开发成本高不高?

答:OCR 爬虫的开发成本,首先取决于爬虫本身的开发成本。OCR 部分相对不高,因为可用的第三方库、API 太多了。现在也可以直接用成熟开源项目:
问:Selenium 会被直接检测出来吗?

答:是的,直接使用 selenium 会被直接检测出来。具体可见:
问:Puppeteer-extra-plugin-stealth 会被检测出来吗?

答:puppeteer-extra,apify/crawlee 这样的工具,提供了 WebDriver 隐身特性,一定程度上缓解了这个问题,但仍然没有完全解决。

  • 没有解决访问轨迹跟踪问题
  • Headless 模式能够被检测出来。云端爬虫通常以 headless 模式运行,即使做了 WebDriver 隐身, headless 模式也能够被检测出来
  • 其他爬虫对抗问题
爬虫对抗中的更多问题可以参考:

问:最高强度的爬虫对抗手段是什么?

答:反爬虫的天花板,是某餐饮点评网站。

  • 常规反爬:Cookie跟踪,IP跟踪,访问频率限制,访问轨迹跟踪等
  • 浏览器自动化工具检测
  • 动态自定义字体
动态自定义字体是终极大招,可以简单理解为每个页面上的每个“文字”都用不同的算法显示,而实际传输的“文本”或者“字符串”是一堆乱码。
即使是这样强度的爬虫对抗,有没有办法解决呢?有的。
一个终极方案是,雇佣 1 万个初中水平的人,挤在房间里刷手机,把读下来的内容填到 Excel 表格里。
比终极方案稍稍靠谱一点的方案是,把这 1 万个初中水平的人换成人形机器人,其他流程不变。
上面两个方案成本过于高昂,还有一些原理类似,成本低廉的方案:使用分布式 RPA 技术,模拟 1 万个用户,同时浏览 1 万个网页,登录网页,下拉页面,点击展开,等等。最后把读到的内容截屏保存转文字。
上述方案成本几何,可以估算一下,能不能迫使对方放弃。
问:爬虫违法吗?

答:采集、分析和融合非隐私公开数据有利于行业发展、数据要素流通和技术进步。行业内几乎每家大数据公司都高度依赖采集和分析其他网站的数据,如果爬虫全部违法,大数据这个行业也就不存在了。国内各大招募网站每天活跃的爬虫工程师近 1000 个,如果爬虫全部违法,这些公司的业务都会受到严重影响,甚至直接倒闭。
问:爬虫的难点到底在哪里?

答:总体拥有成本。
爬虫的难点在于数据规模、数据质量、综合性能、人力维护成本、硬件支出等,这些难题构成了总体拥有成本的难题。
具体来看:

  • ​数据能采集到(难)
  • 数据质量和调度质量保证(难难)
  • 提高运行性能,降低机器成本(难难难)
  • 业务和数据分析(难)
  • 大批量站点的信息抽取(难难难)
  • 构建知识图谱(难难难难)
谈几个具体一点的难点:

  • 如何正确轮换IP?如何设置触发条件?事实上,仅轮换IP不够,需要“隐私上下文轮换
  • 如何使用单台机器每天提取数千万数据点
  • 如何保证数据准确性
  • 如何保证调度准确性
  • 如何保证分布式系统弹性
  • 如何正确提取 CSS 混淆 的字段,它的 CSSPath/XPath/Regex 每个网页都不同,怎么解决?
  • 如何采集数百个电商站点并避免爬虫失效?
问:传统数据采集方案有哪些问题?

目前大家常用的主流的数据采集软件,包括 selenium, playwright, puppeteer 等,不是为数据采集开发的,不适合数据采集;而大家熟知的 scrapy, requests 等,已经越来越不适应现代网页了。
一、现在主流网站常用的反爬手段基本都用了,譬如Cookie跟踪,IP跟踪,访问频率限制,访问轨迹跟踪,CSS 混淆等等。
、使用基本的 HTTP 协议采集,如 requests, scrapy, jsoup, nutch 等,会陷入无穷无尽的爬虫/反爬虫对抗中,得不偿失,并且未必能解决,譬如说采用了动态自定义字体的站点就不可能解决。
、使用浏览器自动化工具如 selenium, playwright, puppeteer 等进行数据采集,会被检测出来并直接屏蔽。
、使用 puppeteer-extra, apify/crawlee 这样的工具,虽然提供了 WebDriver 隐身特性,一定程度上缓解了这个问题,但仍然没有完全解决。

  • 上述工具没有解决访问轨迹跟踪问题
  • Headless 模式能够被检测出来。云端爬虫通常以 headless 模式运行,即使做了 WebDriver 隐身, headless 模式也能够被检测出来
  • 其他爬虫对抗问题
即使解决完上述问题,也仅仅是入门而已。在稍稍正式一点的采集场景下,仍然面临诸多困难:

  • 如何正确轮换IP,触发条件是什么?事实上,仅轮换IP是不够的,需要“隐私上下文轮换
  • 如何使用单台机器每天提取数千万数据点
  • 如何保证数据准确性
  • 如何保证调度准确性
  • 如何保证分布式系统弹性
  • 如何正确提取 CSS 混淆 的字段,它的 CSSPath/XPath/Regex 每个网页都不同,怎么解决?
  • 如何采集数百个电商站点并避免爬虫失效?
  • 如何降低总体拥有成本
问:如何提高网络爬虫的爬行效率?

提升网络爬虫效率首先要做的工作是正确的并行化和分布式,只有正确解决了这两个问题,提升单节点效率才有意义。正确的并行化并不容易,譬如,是否正确解决了隐私上下文轮换问题。
将浏览器渲染作为数据采集的首要方法,可以在数据点规模、数据质量、人力成本和硬件成本之间实现了最佳平衡,并实现最低的总体拥有成本。浏览器渲染一个商品详情页,可以拿到超过 100 个重要字段,涵盖站方特意延迟加载的字段如价格信息;而通过简单 HTTP 拿接口,每接口可能只有十来个字段,最后还需要自行融合。
通过优化,如屏蔽不相关的资源文件,浏览器渲染的性能可以与传统的单一资源采集方法相媲美。
在需要同网页交互的场景中,所有交互操作,譬如滚动、打字、屏幕捕获、鼠标拖放、点击等,也需要优化。
如果需要的数据可以通过单一接口获取,譬如可以通过某个 ajax 接口返回,可以调用单一资源采集方法进行高速采集,单一资源采集方法使用简单的 HTTP 网络协议进行采集。
在提升网络爬虫效率的时候,往往每天需要采集数以百万计的网页,或者数以亿计的数据点,此时,一个至关重要的关联问题是,如何保证数据准确性调度准确性。如果数据不准确,调度出现错误,采下来的数据重复、失效、过期,那么性能再好也没有意义。
随着网站变得越来越复杂,页面变动越来越频繁,越来越多的网站由 Vue,React 等技术动态生成,建议网络爬虫直接从浏览器自动化工具开始,譬如 Selenium,Playwright,Puppeteer,Crawlee,PulsarR  等。尤其不建议再用 Requests, Scrapy 等原始工具了,不要陷入花里胡哨、无穷无尽的爬虫对抗中,这种对抗很多时候是一条死胡同,譬如采用动态自定义字体技术,已经可以彻底阻断 HTTP 抓包方式的采集了。
很多人认为Requests, Scrapy 等原始工具的具有效率优势,这并不正确:

  • 数据点缺失。现代网页数据会由多次异步请求返回组合,原始工具获得的数据点比浏览器少很多
  • 效率假象。对浏览器进行优化和合理配置,譬如屏蔽无关资源,效率可以和原始 HTTP 媲美
  • 成本考虑。原始工具需要额外的繁琐技能才能工作,极大提升人力成本。同人力成本相比,硬件很便宜
  • 爬虫对抗。目标站点的基础反爬机制会迫使爬虫主动降低访问频率
  • 风险规避。对单一资源进行超出常规的访问相当于 DDOS 攻击,从而带来法律风险
  • 其他效率相关弊病
问:网络爬虫的关键技术有哪些?

网络爬虫在各种语言中都有实现,譬如 Java, Kotlin, Javascript, Python, Go, C++ 等。随着网站变得越来越复杂,页面变动越来越频繁,越来越多的网站由 Vue,React 等技术动态生成,我们建议网络爬虫直接从浏览器自动化工具开始,譬如 Selenium,Playwright,Puppeteer,Crawlee,PulsarR 等。这些工具本身由某一种语言编写,但往往对使用者提供了多种语言绑定。
譬如,Selenium 由 Java 编写,但是提供了 Java, Python, C#, Ruby, JavaScript, Perl, PHP, R, Objective-C, Haskell 这些语言的编程接口;Playwright 由 Javascript 写成,但是提供了 JavaScript, Java, Python, C# 的编程接口。
尤其不建议再用 Requests, Scrapy 等原始工具了,不要陷入花里胡哨、无穷无尽的爬虫对抗中,这种对抗很多时候是一条死胡同,譬如采用动态自定义字体技术,已经可以彻底阻断 HTTP 抓包方式的采集了。
在实际的网络数据管理项目中,数据采集需要解决以下关键难题

  • 连续采集
  • 大规模分布式
  • 任务调度
  • 性能保证
  • 数据质量保证
  • 系统架构设计
  • API 设计
  • 机器人流程自动化(RPA)
  • 高级数据采集语言
  • 高级信息提取算法
  • 增强分析
  • 机器学习
  • 弹性计算
  • 云化服务
  • 存储处理
  • 运维工具
  • 降低数据获取成本
  • 降低团队技能要求
  • 提高数据规模
  • 解决数据融合问题
  • 提升时效价值
  • 提高系统可维护性
问:爬虫到底有哪些应用场景?

答:从行业应用场景角度看:

  • 认知智能:高精度结构化全体网页,为认知智能提供基础知识图谱
  • 情感分析:从社交媒体平台、新闻和评论等数据源提取信息,以量化和解读公司、品牌、产品的声誉,跟踪竞争对手,或者收集政务舆情,及时了解任何可能重要的突发事件
  • 价格情报:电商网站更改价格越来越频繁,竞争对手定价和库存监控变得越来越重要。监控竞争对手的定价有助于企业调整自身产品的市价率。品牌商也通过渠道巡检来监控渠道定价,以确保分销商遵守定价政策
  • 供应链管理:使用网络数据进行需求预测、销量预测,以帮助管理物流、采购、库存等。譬如帮助电商对产品销量进行预测,从而制定补货计划,优化库存;航空公司监控市场并调整其定价和航线;而食品公司则通过跟踪农产品原产地气候变化,来预测农产品质量并选择供应商
  • 市场营销:收集有关竞争对手的信息、识别销售线;从新闻、社交媒体和评论中收集信息并进行分析,跟踪需要客服和支持的问题,并进一步制定产品开发和市场进入策略。网络数据还可用于潜在客户生成,识别可能成为特定服务或产品目标的个人或公司
  • 经济与投资研究:从网络数据中生成可分析数据,并通过API 直接交付到投资公司模型,可以近乎实时地推动投资决策。投资公司使用测量移动位置、交通模式、天气、卫星图像、财务报表、宏观经济指标等数据集来帮助制定投资决策。市场数据汇总也被广泛应用于直接投资决策。对一些缺乏行业数据的新兴行业,从网络中获得自身数据指标可能是获得影响未来规划的关键见解的唯一机会
  • 风险管理:使用网络数据增强风险管理措施,如对员工、供应商、交易对手进行背景调查以控制风险,或者用于监控地缘政治风险和检测欺诈
具体可以参见:
问:网络爬虫用什么编程比较好呢?

答:各种语言都可以,譬如 Java, Kotlin, Javascript, Python, Go, C++ 等。随着网站变得越来越复杂,页面变动越来越频繁,越来越多的网站由 Vue,React 等技术动态生成,我们建议网络爬虫直接从浏览器自动化工具开始,譬如 Selenium,Playwright,Puppeteer,Crawlee,PulsarR 等。这些工具本身由某一种语言编写,但往往对使用者提供了多种语言绑定。不要再用 Requests, Scrapy 等原始工具了,不要陷入花里胡哨、无穷无尽的爬虫对抗中。
问:有没有解决上面问题的方案?

答:有的。
PulsarR(国内镜像)为解决网络数据采集、网络数据管理、网络数据挖掘、多源异构数据融合等问题,开发了一系列基础设施和前沿技术:支持高质量的大规模数据采集和处理,支持网络即数据库范式,支持浏览器渲染并将其作为数据采集的首要方法,支持 RPA 采集,支持退化的单一资源采集,计划支持最前沿的信息提取技术,提供了人工智能驱动的网页内容提取的预览版本。
PulsarR 支持高质量的大规模数据采集和处理。PulsarR 开发了一系列基础设施和前沿技术,来保证即使是大规模数据采集场景,也能达到最高标准的性能、质量和总体拥有成本。
PulsarR 支持网络即数据库范式。PulsarR 像对待内部数据库一样对待外部网络,如果需要的数据不在本地存储中,或者现存版本不满足分析需要,则系统会从互联网上采集该数据的最新版本。我们还开发了 X-SQL 来直接查询互联网,并将网页转换成表格和图表。
PulsarR 支持浏览器渲染并将其作为数据采集的首要方法。将浏览器渲染作为数据采集的首要方法,我们在数据点规模、数据质量、人力成本和硬件成本之间实现了最佳平衡,并实现了最低的总体拥有成本。通过优化,如屏蔽不相关的资源文件,浏览器渲染的性能甚至可以与传统的单一资源采集方法相媲美。
PulsarR 支持 RPA 采集。PulsarR 包含一个 RPA 子系统,来实现网页交互:滚动、打字、屏幕捕获、鼠标拖放、点击等。该子系统和大家所熟知的 selenium, playwright, puppeteer 是类似的,但对所有行为进行了优化,譬如更真实的模拟操作,更好的执行性能,更好的并行性,更好的容错处理,等等。
PulsarR 支持退化的单一资源采集。PulsarR 的默认采集方式是通过浏览器渲染来采集完整的网页数据,如果您需要的数据可以通过单一接口获取,譬如可以通过某个 ajax 接口返回,也可以调用 PulsarR 的资源采集方法进行高速采集。
PulsarR 计划支持最前沿的信息提取技术。我们计划发布一个先进的人工智能,以显著的精度自动提取所有网页(譬如商品详情页)中的每一个字段,目前我们提供了一个预览版本,国内镜像。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

云顶设计嘉兴有限公司模板设计.

免责声明:本站上数据均为演示站数据,如购买模板可以上DISCUZ应用中心购买,欢迎惠顾.

云顶官方站点:云顶设计 模板原创设计:云顶模板   Powered by Discuz! X3.4© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表