之前抓数据 都是简单的 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.