最近用 PHP 写爬虫,自我感觉速度效率还不错

2016-03-02 16:08:05 +08:00
 szopen
自己做一个字典 /词典库,所以使用 PHP 从两个网站爬下来, 格式化后入 MySQL 库

总共 7W 个字 /词,全部完成大概是半小时(感谢这两个网站似乎没有做限制,网站性能也不错), CPU 利用率是在 150%( 4 核心平均 40%)左右。

这个效率我还是能接受的,不知道有没有更快的?更快主要需要有哪些方面优化?
7174 次点击
所在节点    PHP
36 条回复
shiny
2016-03-02 16:09:51 +08:00
爬虫爬太快不是作死么
AlexaZhou
2016-03-02 16:12:39 +08:00
半小时大概 1800 秒

7W 条记录的话,如果每条记录查询一次,那么就是每秒 70000/1800 = 38 次查询,并不算快
Strikeactor
2016-03-02 16:13:22 +08:00
比如复用长连接?
AlexaZhou
2016-03-02 16:14:44 +08:00
如果想更快可以多进程,异步

PHP 并不能异步,那么多开几个进程同时爬取可能会更快一些

ps :爬虫太快了容易被封
zpvip
2016-03-02 16:23:29 +08:00
@szopen 请问爬的哪两个网站?
szopen
2016-03-02 16:23:56 +08:00
@AlexaZhou 你这个是查询数据库的计算, 7W 字词是入库后的数据。
每一条数据是从别人网站上爬下来的,因为要考虑网络请求失败问题(主要有网络超时,网站 403 ,获取到的数据不全等重复请求),所有并不是 38 次查询请求
est
2016-03-02 16:28:58 +08:00
好像有个说法是不用 sleep(3) 的爬虫都是爬虫届的耻辱么?
szopen
2016-03-02 16:28:58 +08:00
@zpvip 字典是这个 5156edu ,词典是另一个
szopen
2016-03-02 16:32:25 +08:00
@est 嘿嘿,我多线程, 50 个索引线程,每个索引线程再开 20 个内容线程,爬取时失败等待 500 微秒,然后每失败一次递增,看来是我运气比较好
crabRunning
2016-03-02 19:38:26 +08:00
@AlexaZhou
@est
爬虫不要裸着身子爬,用 tor 或者 hornet 之类代理,身份匿名不可追踪,不断更换 ip.我用来爬过人家密码库,php 开一百个进程.24 小时不停机,从来不 sleep.
lincanbin
2016-03-02 20:06:41 +08:00
PHP 里 curl_multi 实现并发确实很快,以前用来爬豆瓣可以跑到 30M+。
毕竟爬虫瓶颈不在入库,而在网络。
只要网络可以实现并发,用什么语言写都一样。
towser
2016-03-02 20:32:14 +08:00
爬出来能否分亨一份
szopen
2016-03-02 21:49:04 +08:00
@towser 数据不能共享
cxbig
2016-03-02 21:51:29 +08:00
爬虫的效率似乎取决于对方网站有没有加限制吧。。。
chineselittleboy
2016-03-02 23:02:02 +08:00
有代码开源研究研究么
binux
2016-03-02 23:08:02 +08:00
@crabRunning 为什么我用 Hornet 搜到的是 Gay Social Network !你让我搜了什么!
yangqi
2016-03-02 23:10:21 +08:00
php 本来就是最好的语言,没什么意外啊
crabRunning
2016-03-03 00:11:28 +08:00
@binux 用 tor 吧, tor 还带了个 tor-browser , terminal 下还针对小白用户有个 tor-arm 。用 curl 试一下会看到类似下边的效果,做爬虫你值得拥有!
ProxyChains-3.1 ( http://proxychains.sf.net)
|DNS-request| ip.cn
|S-chain|-<>-127.0.0.1:9050-<><>-4.2.2.2:53-<><>-OK
|DNS-response| ip.cn is 40.78.110.144
|S-chain|-<>-127.0.0.1:9050-<><>-40.78.110.144:80-<><>-OK
当前 IP : 77.247.181.163 来自:荷兰
crab@sb:~$ proxychains curl ip.cn
ProxyChains-3.1 ( http://proxychains.sf.net)
|DNS-request| ip.cn
|S-chain|-<>-127.0.0.1:9050-<><>-4.2.2.2:53-<><>-OK
|DNS-response| ip.cn is 40.78.110.144
|S-chain|-<>-127.0.0.1:9050-<><>-40.78.110.144:80-<><>-OK
当前 IP : 94.242.228.108 来自:卢森堡
crab@sb:~$ proxychains curl ip.cn
ProxyChains-3.1 ( http://proxychains.sf.net)
|DNS-request| ip.cn
|S-chain|-<>-127.0.0.1:9050-<><>-4.2.2.2:53-<><>-OK
|DNS-response| ip.cn is 40.78.110.144
|S-chain|-<>-127.0.0.1:9050-<><>-40.78.110.144:80-<><>-OK
当前 IP : 149.202.98.161 来自:法国 OVH
shiji
2016-03-03 00:16:50 +08:00
我曾经用 PHP 扫过疼群的音乐库,挂在服务器慢慢扫的,后来本来想逐一下载。。。结果发现疼讯把洞补上了,,,(是年尾那次针对版权音乐的升级)
eoo
2016-03-03 00:19:41 +08:00
都是大神

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

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

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

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

© 2021 V2EX