请教爬虫问题

2017-01-11 22:22:00 +08:00
 xiaoshangmin

之前抓数据 都是简单的 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

2636 次点击
所在节点    PHP
21 条回复
scnace
2017-01-11 22:48:34 +08:00
grimpil
2017-01-11 22:59:32 +08:00
用数据库存任务队列不行么
xiaoshangmin
2017-01-11 23:08:00 +08:00
@grimpil 可以解释下任务队列吗 不太懂 如果可以用数据库最好 应该抓的数据就是存数据库的
CosimoZi
2017-01-11 23:12:15 +08:00
为什么上来就 selenium
gouchaoer
2017-01-11 23:32:30 +08:00
这个方向是错的,首先不能在 php-fpm 里面跑,需要命令行里面跑

第二 800 多万 url 不多,而且看起来就是简单封 ip 连反爬虫都没做,这个单机几十个并发爬慢点一周内搞定

别一上来就任务队列,爬了的 url/id 存数据库加索引去重就完了,不要把问题复杂化。。。代理这块估计你们没经验,买

用 guzzle 别用 curl 了。。。别用 zts 的多线程,并发老实用多进程写最简单。。。 https://www.v2ex.com/t/324309#reply73
mantouge
2017-01-12 00:38:06 +08:00
为了看小说,然后用这个库做了一个采集,
https://github.com/jmathai/php-multi-curl
用 cli 模式跑,测试采集两千章标题加内容的时间是 8 秒左右
mantouge
2017-01-12 00:43:53 +08:00
spice630
2017-01-12 13:23:51 +08:00
用 golang 啊
xiaoshangmin
2017-01-12 15:20:02 +08:00
@gouchaoer 我买了一个动态代理 但是抓了几百条后出现验证码 这种情况怎么处理好
gouchaoer
2017-01-12 16:25:23 +08:00
@xiaoshangmin 体现技术的地方来了,如果让菜鸟三下五除二就把数据爬了,那后端靠什么吃饭,爬虫工程师靠什么吃饭
yangxiaoluck
2017-01-12 16:42:57 +08:00
推荐开源项目 pyspider ,分布式的,连 js 渲染都可以做。
项目地址: https://github.com/binux/pyspider
yangxiaoluck
2017-01-12 16:43:44 +08:00
不过你要做实时更换代理的话 需要二次开发, 修改的代码不超过 10 行
xiaoshangmin
2017-01-12 19:56:30 +08:00
@yangxiaoluck 不单单换代理还要对付验证码
spice630
2017-01-12 22:05:53 +08:00
爬什么网站
xiaoshangmin
2017-01-12 23:14:47 +08:00
@spice630 www.mlcc1.com 所有商品详情
spice630
2017-01-12 23:19:34 +08:00
xiaoshangmin
2017-01-12 23:28:40 +08:00
@spice630 查料号 首页搜索框下面有个参数选择
xiaoshangmin
2017-01-12 23:30:44 +08:00
ericgui
2017-01-14 11:16:57 +08:00
关注这个帖子。我也遇到同样的问题, foreach 对少量数据 OK 的,没问题。但我要爬 3000 万条数据,再用 foreach 就傻逼了。我也没有解决方案。
xiaoshangmin
2017-01-14 13:45:05 +08:00
@ericgui 如果有解决方案的时候 可以分享下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/333980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX