爬虫目的:爬导航和爬商品 爬虫架构: - electron虚拟浏览器 - proxy代理ip - dashboard网页端调控 - 爬虫APP 实现的功能: - url拼接,过滤出商品 - url翻页,点击翻页,无限流,loadmore按钮 - 过滤文本中包含某text的url,过滤url中包含某url的url,定点过滤特定的url,只爬文本中包含某text的url,只爬url中包含某url的url - 失败移至末尾重试(次数,本次返回的状态码,延时) - 控制爬取频率,控制递归爬取深度 - 用electron防止cookie或ajax动态加载页面,有WaitSelector,直到WaitSelector出现才返回渲染后的页面给spider,否则返回错误码 - 分布式,高并发 - 多个proxy负载均衡 - proxy权限控制 - dashboard网页端爬虫调度,导航log和简单报表分析,商品log和简单报表分析,服务器上当前所有配置一览 我负责的模块: - 配置文件template - 测试被反爬虫的条件,计算最大爬取频率 - 实现同时爬取多个网站,单线程和并发可选 - 默认 http client 不会缓存 DNS 记录,而爬虫会有大量的请求,所以自己专门对 DNS 做缓存 - 调查并分析站点请求不成功的url占比超过 20% 的原因并修复 - 发现并解决 ssl 证书问题 - 网站改版,及时更新配置文件 - 给timeout设一个下界 返回408原因: (1)商品Selector作为WaitSelector,有的页面是介绍页,没有商品,返回408 (2)翻页超过最大页数,没有商品,返回408。这个原因导致的408一般 `成堆` 出现 (3)无限流需要较长时间来翻页,timeout较小会408 (4)目标网站有的商品下架,没有商品,返回408 (5)目标网站反爬策略,封ip后也不返回500,只有提示性的html,等不到商品,返回408 (6)目标网站必须用https 解决方案:(这几个印象深刻,其他的想不起来了) - 商品Selector作为WaitSelector,有的页面是介绍页,没有商品,返回408 - 有2个waitSelector,一个Selector做监督,一个选商品Selector,如果监督Selector出现了而商品Selector没出来,就判定没商品 - 效果好 - 时间成本高 - 只要1个errorSelector,出现提示性的error,判定为没有商品 - 实现简单,时间成本低,逻辑清晰 - 不全面,有些站点如果没有商品,也不出现提示性文字 - electron不处理,无论是否408都把页面返回,交给spider处理 - electron端实现简单,效果好,易于扩展 - spider端实现困难,给spider端挖坑,有隐患 - ssl 证书问题 - 请求时不检测证书 - http 请求 - 换成https请求 - getsockopt: no route to host - 和firewall有关,我们对昂贵的proxy做权限控制,而我在本地没有这个proxy的权限,必须到服务器上搞 - getsockopt: connection time out - 需要特殊的header,不然在命令行是不能成功请求的 - DNS解析 - 原来的每次都要new一个,修复后只要一个持久化 团队共享用到的软件(我们都是远程办公) - slack:交流讨论 - quip:共享文件 - trello:任务管理 - zoom:远程会议 - google图表:共享文件
