文档章节

fsockopen无阻塞 批量抓取页面、图片,批量采集

letwang
 letwang
发布于 2013/12/26 14:08
字数 255
阅读 1235
收藏 7
function multiFsockopen($urlArr) {
    $sockets = array ();
    $urlInfo = array ();
    $retDone = array ();
    $retData = array ();
    $errno = array ();
    $errstr = array ();
    $urlNum = count ( $urlArr );
    for($x = 0; $x < $urlNum; $x ++) {
        $urlInfo [$x] = parse_url ( $urlArr [$x] );
        $urlInfo [$x] ['port'] = (isset ( $urlInfo [$x] ['port'] )) ? $urlInfo [$x] ['port'] : 80;
        $urlInfo [$x] ['path'] = ($urlInfo [$x] ['path']) ? $urlInfo [$x] ['path'] : "/";
        $sockets [$x] = fsockopen ( $urlInfo [$x] ['host'], $urlInfo [$x] ['port'], $errno [$x], $errstr [$x], 30 );
        stream_set_timeout ( $sockets [$x], 60 );
        stream_set_blocking ( $sockets [$x], false );
        $query = (isset ( $urlInfo [$x] ['query'] )) ? "?" . $urlInfo [$x] ['query'] : "";
        fwrite ( $sockets [$x], "GET " . $urlInfo [$x] ['path'] . "$query HTTP/1.0\r\nHost: " . $urlInfo [$x] ['host'] . "\r\nConnection: close\r\n\r\n" );
    }
    $done = false;
    while ( ! $done ) {
        for($x = 0; $x < $urlNum; $x ++) {
            if (! feof ( $sockets [$x] )) {
                if (isset ( $retData [$x] )) {
                    $retData [$x] .= fgets ( $sockets [$x], 128 );
                } else {
                    $retData [$x] = fgets ( $sockets [$x], 128 );
                }
            } else {
                $retDone [$x] = 1;
            }
        }
        $done = (array_sum ( $retDone ) == $urlNum);
    }
    return array_combine ( $urlArr, $retData );
}

$results = multiFsockopen ( array (
        'http://www.baidu.com/img/bdlogo.gif',
        'http://a.tbcdn.cn/tbsp/img/header/logo.png',
        'http://gtms01.alicdn.com/tps/i1/T1N0pxFEhaXXXxK1nM-357-88.jpg',
        'http://p9.qhimg.com/t01a6b838b555a7435b.png' 
) );
//http://my.oschina.net/cart/
foreach ( $results as $key => $result ) {
    file_put_contents ( basename ( $key ), substr ( $result, strpos ( $result, "\r\n\r\n" ) + 4 ) );
}
exit ();


fsockopen socket 无服务器限制 支持header、cookie、refer 挂马远程

CURL和fsockopen两种方式POST数据并写入文件

© 著作权归作者所有

共有 人打赏支持
letwang
粉丝 171
博文 54
码字总数 81461
作品 1
南京
技术主管
私信 提问
CURL和fsockopen两种方式POST数据并写入文件

function http($host, $path, $post, $timeOut = 60) {if (functionexists ( 'curlinit' ) && functionexists ( 'curlexec' )) {$ch = curl_init ( 'http://' . $host . $path );curlsetopt ......

letwang
2013/12/25
0
0
【03】基础:同种网页结构套用采集规则

请先安装爬虫软件。爬虫软件安装 经过上个教程小试牛刀之后就可以尝到获得数据的喜悦了。 回顾一下,上个教程主要了解了MS谋数台的工作职责-定义采集规则,测试规则无误之后点击MS谋数台右上...

fullerhua
2016/09/19
20
0
更好用的chrome下载器 chrono

众所周知, chrome原生的下载功能的确不太好用, 如果我们需要查看当前的下载任务, 需要点击两次(点击右上角 三个点 , 点击下载内容), 而使用了chrono, 只需要点击一次(点击chrono) chrono还集...

木子昭
08/12
0
0
天猫页面如何抓取信息

最近试图抓取淘宝的产品页面信息 试过 file()函数 file_get_content()函数 fopen()函数 curl方法 fsockopen函数 以及一些插件 但是都无法采集到天猫的数据 报302错误 不知道各位高手能不能给...

非马
2013/06/06
2K
8
网页抓取/信息提取软件--MetaSeeker

爬虫软件MetaSeeker,现已全面升级为GooSeeker。 新版本已经发布,在线版免费下载和使用,源代码可阅读。自推出以来,深受喜爱,主要应用领域: 垂直搜索(Vertical Search):也称为专业搜索...

匿名
2011/04/07
32.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

解析Nuxt.js Vue服务端渲染摸索

本篇文章主要介绍了详解Nuxt.js Vue服务端渲染摸索,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 Nuxt.js 十分简单易用。一个简...

前端攻城老湿
4分钟前
0
0
深入解析React中的元素、组件、实例和节点

React 深入系列,深入讲解了React中的重点概念、特性和模式等,旨在帮助大家加深对React的理解,以及在项目中更加灵活地使用React。 React 中的元素、组件、实例和节点,是React中关系密切的...

前端攻城小牛
19分钟前
2
0
菜鸟网络三面面经(java开发岗):Spring boot+JVM+线程池+中间件

一面 1、HaspMap底层原理?HaspTable和ConcurrentHashMap他们之间的相同点和不同点? 2、由上题提到锁的问题 3、MySQL的表锁&行锁&乐观锁&悲观锁,各自的使用场景 4、Java线程锁有哪些,各自的...

别打我会飞
24分钟前
3
0
NCL入门

;***这两行指令必须加载,类似于c语言中的库函数load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"begin ......

voole
27分钟前
1
0
程序员该如何把握黄金五年!

在Java业界流行着一种说法——黄金5年,就是从程序员入职时算起,前五年的工作选择直接影响整个职业生涯的职业发展和薪资走向。如何把握这五年,从一个刚入行的菜鸟蜕变成一个处事不惊的大佬...

James-
37分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部