文档章节

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

letwang
 letwang
发布于 2013/12/26 14:08
字数 255
阅读 1227
收藏 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
粉丝 154
博文 64
码字总数 77157
作品 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()函数 filegetcontent()函数 fopen()函数 curl方法 fsockopen函数 以及一些插件 但是都无法采集到天猫的数据 报302错误 不知道各位高手能不能给个...

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

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

匿名
2011/04/07
32.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

五大云原生技术

云原生(Cloud-Native)是一种文化,更是一种潮流,它是云计算的一个必然导向,是让云成为云化战略成功的基石。云计算时代,云原生技术注定将对现代化应用的建设、交付与运维产生颠覆性的影响...

问题终结者
13分钟前
2
0
Android JNI开发系列(十二) JNI局部引用、全局引用和弱全局引用

JNI 局部引用、全局引用和弱全局引用 在JNI规范中定义了三种引用:局部引用(Local Reference)、全局引用(Global Reference)、弱全局引用(Weak Global Reference)。区别如下: 局部引用...

蔡小鹏
14分钟前
2
0
Android 实现类似考试座号表效果

类似于这种效果 1,新建一个Student类,用户添加学生信息 private int icon; private String name; private int age; private String sex ; private int id; publ...

lanyu96
20分钟前
1
0
聊聊storm的CustomStreamGrouping

序 本文主要研究一下storm的CustomStreamGrouping CustomStreamGrouping storm-2.0.0/storm-client/src/jvm/org/apache/storm/grouping/CustomStreamGrouping.java public interface CustomS......

go4it
29分钟前
2
0
编程中的各种闲谈

service 是否一定要定义 interface 在学习ssh(spring, struts2, hibernate)时,老师教在 service 层要定义接口,再去实现此接口,方便解耦。 在 spring 框架中,自身定义了很多接口,并且有不...

seal_90
30分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部