文档章节

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

letwang
 letwang
发布于 2013/12/26 14:08
字数 255
阅读 1223
收藏 7
点赞 0
评论 0
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
粉丝 140
博文 67
码字总数 76298
作品 0
南京
技术主管
CURL和fsockopen两种方式POST数据并写入文件

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

let ⋅ 2013/12/25 ⋅ 0

【03】基础:同种网页结构套用采集规则

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

fullerhua ⋅ 2016/09/19 ⋅ 0

天猫页面如何抓取信息

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

非马 ⋅ 2013/06/06 ⋅ 8

网页抓取/信息提取软件--MetaSeeker

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

匿名 ⋅ 2011/04/07 ⋅ 0

cURL、file_get_contents、snoopy.class.php 优缺点

curl()、filegetcontents()、snoopy.class.php这三个远程页面抓取或采集中用到的工具,他们功能相当,到底有什么优缺点呢,下面逐一介绍: snoopy.class.php snoopy 是用 fsockopen 自开发的...

Junn ⋅ 2013/07/29 ⋅ 0

Gather Platform V0.4 新增任务批量管理

Gather Platform V0.4 发布了,新功能: 新增爬虫模板批量启动,在爬虫模板管理界面可以勾选多个爬虫批量启动。 修复BUG: 修正模态框堆叠问题; 修正更新webmagic版本带来的jar包冲突问题;...

gsh199449 ⋅ 2017/02/17 ⋅ 3

阳光企业网站管理系统--SCSCMS

阳光企业网站管理系统V2.0用户手册 阳光企业网站管理系统(Sunshine Corporation Site),简称SCSCMS或SCS,其标识及程序,属太阳光工作室版权所有。 本站公开发行的SCSCMS为开源免费程序,你...

匿名 ⋅ 2011/06/26 ⋅ 0

Pholcus 0.6.1 发布,Go 爬虫软件

Pholcus 0.6.1 发布,更新内容如下: 调整spider结构体,规范命名,精简方法; 拓展Teleport Socket API; 新增大量采集规则实例; 解放规则库,用户可以自由指定规则库; 不再直接提供main包...

oschina ⋅ 2015/08/20 ⋅ 3

Python爬虫之正则表达式 PK Pyquery

抓取的目标网页:http://ypk.39.net/2017019/manual 主要抓取内容为药品说明书内容 下面先给出正则表达式的抓取方式: #-- coding:gbk -- import urllib2import reimport randomimport os de...

东方神剑 ⋅ 2016/01/07 ⋅ 0

node.js爬虫爬取电影天堂,实现电视剧批量下载。

一、项目描述   引言:在电影天堂下电视剧的下伙伴有木有发现,它没有提供批量下载功能,美剧英剧还好,10集左右,我就多点几下吧,可是我们国产局呢,少则三十集,多则四五十级。下载那叫...

761218914 ⋅ 2016/11/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 14分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 18分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 23分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 24分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 34分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 56分钟前 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 59分钟前 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 今天 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部