回复: 回复: 回复:[thinkinlamp] 纯 PHP 实现并支持 Keep-Alive 和并行抓取的 HttpClient.class.php

51 views
Skip to first unread message

傻傻等你??

unread,
Mar 15, 2013, 3:40:53 AM3/15/13
to thinkinlamp
以前我看不懂的邮件, 我从来不回复... 只是虚心的学习... 


------------------ 原始邮件 ------------------
发件人: "小马xiaoma"<cnxi...@gmail.com>;
发送时间: 2013年3月15日(星期五) 下午3:36
收件人: "thinkinlamp"<think...@googlegroups.com>;
主题: Re: 回复: 回复:[thinkinlamp] 纯 PHP 实现并支持 Keep-Alive 和并行抓取的 HttpClient.class.php

浏览器怎么解析的呢?不也是通过代码解析的么?

在 2013年3月15日下午3:32,傻傻等你?? <ss...@vip.qq.com>写道:
小马哥, 怎么解析ajax命令~ 给我们讲讲呗.
举个例子:
抓取的目标页面只有一个div. 一个script标签,src了一个js文件,此js文件经过代码混淆了.js文件中ajax请求了一个url.返回是结果填充到div中. 这个页面通过浏览器看是正常的, 但是, 你能通过php给我抓到通过浏览器看到的效果么? 也就是你所谓的抓取ajax...

还有, 楼主的这个实现真赞~~ 前几天我还研究stream_select来着, 结果没弄明白都... 膜拜下楼主..


------------------ 原始邮件 ------------------
发件人: "青蛙王子"<6589...@qq.com>;
发送时间: 2013年3月15日(星期五) 中午12:56
收件人: "thinkinlamp"<think...@googlegroups.com>;
主题: 回复: 回复:[thinkinlamp] 纯 PHP 实现并支持 Keep-Alive 和并行抓取的 HttpClient.class.php

完全可以实现。


------------------ 原始邮件 ------------------
发件人: "小马xiaoma"<cnxi...@gmail.com>;
发送时间: 2013年3月15日(星期五) 中午12:48
收件人: "thinkinlamp"<think...@googlegroups.com>;
主题: Re: 回复:[thinkinlamp] 纯 PHP 实现并支持 Keep-Alive 和并行抓取的 HttpClient.class.php

可能的,没啥不可能,只要解析ajax命令,ajax也是通过http在客户端去抓取的。

在 2013年3月15日下午12:10,潘钜添 Firzen <firz...@gmail.com>写道:
抓取ajax生成的内容?这个不可能吧

2013/3/15 青蛙王子 <6589...@qq.com>
很可惜,不能抓取js生成的内容,ajax。。。。。。因此,废弃。


------------------ 原始邮件 ------------------
发件人: "maminglian";
发送时间: 2013年3月15日(星期五) 上午10:50
收件人: "thinkinlamp";
主题: [thinkinlamp] 纯 PHP 实现并支持 Keep-Alive 和并行抓取的 HttpClient.class.php

前段时间有抓取数据的需求,考虑到驻留长时抓取的性能需求,不可能一次一个 file_get_congents 调用,
即便使用 curl 扩展可以解决并行抓取,但似乎也无法发挥出 Keep-Alive 的优势(即一次连接,多次请求)。

因此使用纯 PHP 代码开发了这个类库,是一个比较完整的 Http 客户端,主要特色:
* 1) 纯 PHP 代码实现,无需依赖任何扩展
* 2) 允许设置各种 HTTP 头,完整的支持 Cookie
* 3) 支持 301/302 重定向识别,可设置最多跳转的次数
* 4) 支持 Keep-Alive 连接,重用于同一主机下的其它请求
* 5) 支持 https 访问(需要 PHP 开启 ssl 扩展)
* 6) 支持 POST 表单的文件上传
* 7) 支持同时并行处理多个请求

其中TCP连接采用异步方式,并行处理采用 stream_select() 多路IO轮循实现,也支持回调函数处理HTTP响应结果。


简要示范:(粘自github的README,不知能否正确显示)
require 'HttpClient.class.php';

function test_cb($res, $req, $key)
{
   echo '[' . $key . '] url: ' . $req->getUrl() . ', ';
   echo 'time cost: ' . $res->timeCost . ', size: ' . number_format(strlen($res->body)) . "\n";
}

$http = new HttpClient('test_cb');

// 全部 URL 抓取完毕时一并返回,传入单个 URL 或数组组成的多个 URL
// 第一次请求可能因为域名解析等原因较慢,可以自行构造 HttpRequest 直接用 IP请求更快
$results = $http->get(array(
  'baidu' => 'http://www.baidu.com/',
  'sina' => 'http://news.sina.com.cn/',
  'google' => 'http://www.google.com.sg/',
  'qq' => 'http://www.qq.com/',
));

// 键名不变,值为 HttpResponse 对象
//print_r($results);

注意:您可以通过 HttpClient::debug('open'); 会详细打印很多信息。


----
hightman/海鳗




--
--
ThinkingInLAMP邮件组使用说明:http://blog.thinkinlamp.com/?p=758

---
您收到此邮件是因为您订阅了 Google 网上论坛的“thinkinlamp”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 thinkinlamp+unsubscribe@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。


--
--
ThinkingInLAMP邮件组使用说明:http://blog.thinkinlamp.com/?p=758

---
您收到此邮件是因为您订阅了 Google 网上论坛的“thinkinlamp”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 thinkinlamp...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。



--
--
ThinkingInLAMP邮件组使用说明:http://blog.thinkinlamp.com/?p=758

---
您收到此邮件是因为您订阅了 Google 网上论坛的“thinkinlamp”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 thinkinlamp...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。



--
--
ThinkingInLAMP邮件组使用说明:http://blog.thinkinlamp.com/?p=758

---
您收到此邮件是因为您订阅了 Google 网上论坛的“thinkinlamp”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 thinkinlamp...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。


--
--
ThinkingInLAMP邮件组使用说明:http://blog.thinkinlamp.com/?p=758

---
您收到此邮件是因为您订阅了 Google 网上论坛的“thinkinlamp”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 thinkinlamp...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。


--
--
ThinkingInLAMP邮件组使用说明:http://blog.thinkinlamp.com/?p=758

---
您收到此邮件是因为您订阅了 Google 网上论坛的“thinkinlamp”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 thinkinlamp...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。



--
--
ThinkingInLAMP邮件组使用说明:http://blog.thinkinlamp.com/?p=758

---
您收到此邮件是因为您订阅了 Google 网上论坛的“thinkinlamp”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 thinkinlamp...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。


青蛙王子

unread,
Mar 15, 2013, 4:08:32 AM3/15/13
to thinkinlamp
现在的抓取,好些都是调用浏览器内核抓取的,因此完美的解决了ajax这些问题。懂了吗。兄弟

傻傻等你??

unread,
Mar 15, 2013, 4:53:13 AM3/15/13
to thinkinlamp
不错~ 谢谢分享~~ 

还有, 小马跟青蛙... 楼主的实现是为了不依赖任何扩展的实现... 你们说毛浏览器内核..... 


------------------ 原始邮件 ------------------
发件人: "wang tiezhen"<jwz...@gmail.com>;
发送时间: 2013年3月15日(星期五) 下午3:39
收件人: "thinkinlamp"<think...@googlegroups.com>;
主题: Re: 回复: 回复:[thinkinlamp] 纯 PHP 实现并支持 Keep-Alive 和并行抓取的 HttpClient.class.php

http://php.net/manual/en/book.v8js.php
php 现在也有 v8 引擎了


2013/3/15 小马xiaoma <cnxi...@gmail.com>

maminglian

unread,
Mar 15, 2013, 5:01:11 AM3/15/13
to think...@googlegroups.com
其实前些天就上传到 github 了,很久没参与 thinkinlamp 讨论于是就丢上来,大家还都很热情,感谢感谢。

这个东西的目标改进是大量的抓取时的效率,以及隐藏掉 cookie 等一些麻烦的处理因素,用起来可以像 file_get_contents 一样爽,又能带有 curl 的全部功能。

Jie Hu

unread,
Mar 15, 2013, 6:18:26 AM3/15/13
to think...@googlegroups.com
前几天用pcntl和curl包了一个可以多进程跑的抓取工具。。。当时咋没发现有这玩意

huanggy001

unread,
Mar 26, 2013, 2:31:38 AM3/26/13
to think...@googlegroups.com
技术讨论最经常出现的情况就是当有人抛出一个代码后,会马上有人说“这东西没用, 不能实现XX功能”或者“这东西没用, XX软件已经实现了”。
拜托都看下人家的功能, 是采集类,不是采集软件!还整v8引擎。我汗。 

2013/3/15 Jie Hu <xsi...@gmail.com>
Reply all
Reply to author
Forward
0 new messages