要实现高效的爬虫,大家能给点建议不?

2014-12-22 19:15:39 +08:00
 andrewrong
最近公司要实现一个高性能的爬虫,用来爬取淘宝的商品信息,数量比较大,时间上也有要求;

我们公司现在有一个爬虫,是用PHP实现的,全部都是手写的,没有用什么框架,通过代理IP单进程来实现爬取页面;从上面的需求我们的想法是通过起多个进程来实现并发爬取淘宝页面;但是针对那么大的量我们必须充分利用我们的代理IP,但是又不能被淘宝封;

针对上面的这些描述,我想问我现在遇到的一些问题:

1. 如何高效的利用我们的代理IP(不是很多),又不被淘宝封(这个希望能比较详细点)?
2. 我们现在这套PHP架构是否合适做这个爬虫,如果不适合,能不能建议一下?
3. 我在网上看到有人提出应该有一个反监控系统用来检测对方的反爬的变化,并且做出相应的调整,有人做过这个东西吗?

最后,谢谢大家啦...
5052 次点击
所在节点    程序员
23 条回复
mringg
2014-12-22 19:23:46 +08:00
你得监控下,看看你们的瓶颈在哪里,然后才能考虑怎么优化
andrewrong
2014-12-22 19:27:46 +08:00
@mringg 目前我们测试发现爬取一个商品基本上要花3s,如果代理IP比较好的话就比较快;3s基本算是一个平均值;最后爬取的页面通过正则把要的内容取出然后存入数据库;现在是单进程所以代理IP还没充分的利用起来;
haker
2014-12-22 19:29:09 +08:00
拨号换IP呀!
andrewrong
2014-12-22 19:31:07 +08:00
@haker 是公司,用拨号换IP可行吗?我在google的时候也有人提出,我不是很理解这个概念,是不是重新拨号IP就会换这个意思?
haker
2014-12-22 19:31:14 +08:00
看错了,你的是php的。
写客户端,拨号换ip,开50-100线程,没日没夜的爬
GeekGao
2014-12-22 19:31:17 +08:00
高效 可由不得你,电商网站都有反爬虫机制,你速度快起来了也够呛能提高爬取效率。
使用PHP的话也可以搞个多进程的爬虫,语言并不是什么太大问题。关键是你爬虫的调度策略。
andrewrong
2014-12-22 19:33:01 +08:00
@GeekGao 你说的爬虫调度策略具体指什么?
haker
2014-12-22 19:33:20 +08:00
@andrewrong 重新拨号就会换ip,去电信申请多进程,可以各地政策不一样,我们这里可以申请到2个进程,就是一个猫同一个账号,两台机器可以同时进行拨号。
GeekGao
2014-12-22 19:38:15 +08:00
@andrewrong
什么时间爬什么内容什么时候暂停什么时候再开始
andrewrong
2014-12-22 19:50:17 +08:00
@GeekGao 这个就要看taobao店的反爬机制来定了...哎...好纠结哇...
yakczh
2014-12-22 20:17:11 +08:00
随机间隔时间爬
tftk
2014-12-22 22:06:03 +08:00
3s有点慢。
xunyu
2014-12-22 22:22:32 +08:00
task做好,多任务分布式,单机循环肯定不行的,可以试试rabbitmq
nowgoo
2014-12-22 23:20:06 +08:00
购买阿里云最低配VPS。
ETiV
2014-12-22 23:46:00 +08:00
PHP 不知道有没有TCP连接的复用...可以检查一下, 要是每次爬完都close 了socket, 那应该用更底层的方式去做, 能快一些吧
binux
2014-12-22 23:55:00 +08:00
1. 如何高效的利用我们的代理IP(不是很多),又不被淘宝封(这个希望能比较详细点)?
想让马跑又不让马吃草。。唯一的办法就是挖掘每个IP的抓取极限,看看多大的速度不会被封。另外一种办法就是找更多的代理。

2. 我们现在这套PHP架构是否合适做这个爬虫,如果不适合,能不能建议一下?
取决于瓶颈在被封,还是处理速度。如果你没有足够的IP,无法提高速度,语言或者架构是无法为你带来提升的。反之,瓶颈不再是怕被封的话。使用异步抓取,多进程解析能进一步提高性能。而 PHP 这么好的语言,我不知道行不行。

3. 我在网上看到有人提出应该有一个反监控系统用来检测对方的反爬的变化,并且做出相应的调整,有人做过这个东西吗?
这东西还是靠更多经验,你就抓一个淘宝,而且没有那么多IP资源让你折腾的话,手动搞一个流量限制就好了。由于抓取延迟长达3秒,细的特征实际上一点用都没有。就是 UA+cookie+每分钟流量控制就完了。


最后广告一下: https://github.com/binux/pyspider 异步,带流量控制,多进程带 WEBUI 的爬虫
esile
2014-12-23 02:18:48 +08:00
@binux pyspider+1
sohoer
2014-12-23 08:45:59 +08:00
淘宝商品数量级使用代理怕是不靠普
多线ADSL+自动重拔(有偿提供方案)
andrewrong
2014-12-23 09:20:26 +08:00
@binux 谢谢binux那么详细的回答,给了我那么多的建议;我会去思考你说的这些的方面的...其实代理IP可以申请,但是我也要最大化每一个代理IP的利用率...
crazycookie
2014-12-23 12:46:07 +08:00
scrapy 记得打开cookies,还是不错的... 多ip的策略人工打码啊

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

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

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

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

© 2021 V2EX