之前抓数据 都是简单的 for 循环加 curl 但是现在有 800 多万条 url 要抓取 这样做就不行了 下面是一个总监给的方案
get_task.php 拿任务, post_task.php 反馈任务
get_proxy.php 拿代理, post_proxy.php 反馈代理
然后做 单线程 无限循环
1. echo "\x00"; 维持跟浏览器不会断开;
2. 检查 “ timeout.txt ”存在, 则 sleep(5) continue
3. 检查 “ stop.txt ”存在, 则 break 离开无限循环,或直接 die
4. 调用 get_proxy, get_task 获得 代理 和 任务
5. 抓数据
6. 被屏蔽,通知代理被屏蔽 从头开始
7. 拿到数据代码,更新 任务 为 完成,保存 耗用时间
10. 其他异常,记录在 任务不再执行
继续循环
谷歌了好多 php 任务队列和多进程的文章还是没搞明白
如何生成队列 是数组吗 如何派任务 怎么记录任务完成情况
php 的 worker 和 threads 如何配合使用
因为抓取的网站会封 ip 所以要用代理 怎么评估记录代理的效益 代理是否被封 被封后切换代理
本来想用框架做的 但是总监说作为一个后台这些高级编程要自己玩一边要懂 就没去搞
但是现在没什么思路 希望 v 友可以从任务队列和线程方面指点下 不要用框架和 redis