写点什么

1. 爬虫系统

作者:joy
  • 2023-11-25
    广东
  • 本文字数:1889 字

    阅读完需:约 6 分钟

1. 通用场景

通用的方法有静态页面和异步接口两种:

a. 静态页面:通过分析站点返回的 HTML 结果页, 解析标签和属性, 获取自己所需数据;

b. 异步接口:而对于大多站点, 页面内容通过接口异步请求加载, 所以可以直接构造入参模拟接口请求, 获取自己所需数据。由于异步接口可以直接访问而效率更高的优势, 目前所以会被应用于 90%以上的使用场景。 


2. 频控拦截 

2.1 频控拦截

但对于很多中大型公司和站点, 为了保护数据安全和服务稳定,会有机器爬取行为的频控反爬防范手段。例如国内 B 站每个接口对相同 IP 的访问限制 2-3QPS, 国外 FB 和 YT 同样会做功能和接口做频控限制。其中 YT 对相同 IP 高频访问一段时间, 提示流量异常的错误信息;



2.2 代理能力

a. 代理模块: 因此需引入代理能力, 通常购买三方的国内外专业代理 IP 池;如有大规模代理 IP 访问的诉求,也可考虑自搭建 IP 代理池。通用的代理模块: 根据需求购买套餐,定期从 IP 代理厂商拉取 IP 代理, 建立可用 IP 缓存池;采集端根据站点场景, 访问获取所需类型的代理 IP;



b. 代理特点: 具有时效性, 短效和长效代理选择取决于访问场景和站点风控策略; 同时具有区域性, 国内代理和海外代理分别只能访问各自区域, 相互不能访问; 

c. 技术问题: 如何精确控制代理池, 以最小成本购买获取最大代理 IP 利用率?IP 厂商对代理 IP 访问 QPS 有上限约束 和 目标站点对 同一代理 IP 访问同一接口有上限约束;在多约束条件下, 采集端如何快速获取可用代理, 是个技术问题。



3. 加签拦截 

3.1 加签拦截

另外, 接口加签也是许多站点防范机器爬取行为的一种手段。例如:需要带上 Referer/UA 等字段信息、参数加签行为和须携带定制 X-*的字段头信息,这类字段头完全没有业务语义和不晓得怎么计算获取, 来增加机器模拟请求的门槛。通常会两种解法, 第一种: 逆向页面 JS,突破前端混淆和压缩等技术,但这种暴力破解的方案效率低下, 也会违反互联网爬虫条约。另外一种:通过模拟浏览器访问的能力。



3.2 模拟浏览

有时绕过问题是解决问题的很有效方案, 我们可以通过模拟浏览器访问行为, 利用浏览器的 JS 解析和页面渲染核心能力, 返回最终 HTML 页面, 最后从 HTML 中获取所需数据。例如, 采用 Selenium 和 ChromeDriver 技术栈,可以快速搭建浏览器集群。Driver 提供 HTTP 协议服务化控制浏览器的 SDK, Selenium 提供可以远程操作浏览器的 API 接口 SDK。



4. 账号准入 

4.1 账号准入

解决了频控和加签限制, 能满足 80%的站点访问场景。但有些社交、数据商业如 qimai 站点和管理后台类型, 需要账号登入, 才能访问到对应站点和页面数据。



4.2 账号管理: 

这时引入账号管理和模拟登入模块, 来定期自动模拟账密登入和刷新有效 Cookie。 采集端访问此类站点时, 通过账号管理模块获取有效 Cookie, 实现自动化的访问和获取站点数据。



5. 人机验证

5.1 人机验证



账密登入时, 由于存在各类人机验证和拦截, 自动模拟登入门槛通常较高;常见的人机验证场景有: 滑块、填空、点选、邮箱验证、短信验证和扫码登入;

a. 滑块填空: 可以集成 opencv 库和图像识别能力, 获取图片文字进行填空;

b. 邮箱验证:开放邮箱 imap/smtp 访问协议, 自动登入时, 通过授权 token 访问邮箱获取实时验证码, 进行准入登入;

c. 点选答题:此类对算法成功率要求较高, 通常可以引入三方识别服务。算法需要识别描述文字语义, 根据语义识别图片内容和像素点结果, 然后爬虫端根据识别结果进行指定像素点的点选和答题;

d. 短信验证/扫码登入: 有些站点网页仅提供短信验证和扫码的方式登入, 怎么实现自动化的登入和采集呢?

5.2 App 采集

由于收集端的账号双 Token 登入机制, 通常一次登入可以长期有效和再次免登。所以 需要扫码和短信验证的网页登入场景, 可以通过 App 端方式来采集。App 采集核心解决两个问题: 远程 App 模拟操作问题和 Hook 拦截解析数据。



6. 采集调度

介绍完采集端的代理、账号和 cookie 等依赖资源服务后。那在采集目标站点时, 采集端工作流程是怎么样的?

例如采集游戏"原神", 在 B 站的头部 UP 和 KOL 流程: 综合搜索"原神" -> 视频列表页 -> 进入视频详情页 -> 收集视频指标 -> 进入视频作者 UP 主页-> 收集作者详情指标。无论做广度采集还是定向采集, 搜索结果形成一个搜索多级任务模型;



当搜索结果列表达十万级别, 单机采集效率显得很慢,这时需要引入采集的另一个重要组件:任务调度。



采集端执行任务时, 不断裂变更多的子任务, 然后由任务调度分发到不同的采集端并行执行,通过分布式采集达到提效的目的。 

7. 总结架构

最后总结一个规模化采集的通用架构: 采集端、调度层和资源服务的组成的三角关系。代理服务、浏览服务和账号服务等二方依赖服务统一集成为资源服务;调度层首先派发任务给采集端, 采集端根据站点场景从资源服务获取对应所需资源, 进行采集。



发布于: 刚刚阅读数: 3
用户头像

joy

关注

还未添加个人签名 2020-10-25 加入

还未添加个人简介

评论

发布
暂无评论
1. 爬虫系统_joy_InfoQ写作社区