php采集

采集思路  

采集程序的思路很简单大体可以分为以下几个步骤:

1. 获取远程文件源代码(file_get_contents或用fopen).

     2.分析代码得到自己想要的内容(这里用正则匹配,一般是得到分页)。

     3.跟根得到的内容进行下载入库等操作。

    在这里第二步有可能要重复的操作好几次,比如说要先分析一下分页地址,在分析一下内页的内容才能取得我们想要的东西。

<?php
/****获取远程文件源代码常用三种方法***/
/***方法一、 fopen(),stream_context_create()方法****/
$opts = array(
  ‘http‘=>array(
    ‘method‘=>"GET",
    ‘header‘=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);
$context = stream_context_create($opts);
$fp = fopen(‘http://www.example.com‘, ‘r‘, false, $context);
fpassthru($fp);
fclose($fp);

/******方法二、 socket*******/
function get_content_by_socket($url, $host){
    $fp = fsockopen($host, 80) or die("Open ". $url ." failed");
    $header = "GET /".$url ." HTTP/1.1\r\n";
    $header .= "Accept: */*\r\n";
    $header .= "Accept-Language: zh-cn\r\n";
    $header .= "Accept-Encoding: gzip, deflate\r\n";
    $header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)\r\n";
    $header .= "Host: ". $host ."\r\n";
    $header .= "Connection: Keep-Alive\r\n";
    //$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-\r\n\r\n";
    $header .= "Connection: Close\r\n\r\n";
    fwrite($fp, $header);
    while (!feof($fp)) {
        $contents .= fgets($fp, 8192);
    }
    fclose($fp);
    return $contents;
}

/******方法三、file_get_contents (),stream_context_create() 方法三********/
$opts = array(
        ‘http‘=>array(
        ‘method‘=>"GET",
        ‘header‘=>"Content-Type: text/html; charset=utf-8" 
            )
        );        
$context = stream_context_create($opts);        
$file = file_get_contents(‘http://www.sohu.com/‘, false, $context);

/******方法四、 PHP的cURL http://www.chinaz.com/program/2010/0119/104346.shtml*******/
$ch = curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "http://www.sohu.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_HTTPHEADER,array ("Content-Type: text/xml; charset=utf-8","Expect: 100-continue"));
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
var_dump($output);
// 4. 释放curl句柄
curl_close($ch);

/*注意
1.使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置 allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。
2. 使用curl必须空间开启curl。方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且需 要拷贝ssleay32.dll和libeay32.dll到C:/WINDOWS/system32下;Linux下要安装curl扩展。
*/
?>

采集范例程序

/*一个图片下载函数*/
function getimg($url,$filename){
    /*判断图片的url是否为空,如果为空停止函数*/
    if($url==""){
        return false;
    }
    /*取得图片的扩展名,存入变量$ext中*/
    $ext=strrchr($url,".");
    /*判断是否是合法的图片文件*/
  if($ext!=".gif" && $ext!=".jpg"){
        return false;
    }
    /*读取图片*/
    $img=file_get_contents($url);
    /*打开指定的文件*/
    [email protected]($filename.$ext,"a");
    /*写入图片到指点的文件*/
    fwrite($fp,$img);
    /*关闭文件*/
    fclose($fp);
    /*返回图片的新文件名*/
    return $filename.$ext;
}

采集图片php程序

除了以上方法还可以用Snoopy,也不错。

Snoopy是什么? (下载snoopy

Snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务。

Snoopy的一些特点:

* 方便抓取网页的内容

* 方便抓取网页的文本内容 (去除HTML标签)

* 方便抓取网页的链接

* 支持代理主机

* 支持基本的用户名/密码验证

* 支持设置 user_agent, referer(来路), cookies 和 header content(头文件)

* 支持浏览器转向,并能控制转向深度

* 能把网页中的链接扩展成高质量的url(默认)

* 方便提交数据并且获取返回值

* 支持跟踪HTML框架(v0.92增加)

* 支持再转向的时候传递cookies (v0.92增加)

时间: 2024-08-01 10:46:34

php采集的相关文章

CMDB资产采集

Agent(方式) 1:服务器每台都需要安装Agent 达到采集速度快,简单:造成性能损耗 获取每台服务器的资产并有返回值:v=subprocess.getoutput('dir')或者ipconfig 返回给api api在进行入库 (api 1.url 2.指定发送数据格式 3.并有返回值给客户端) 2:应用场景:服务较多的公司 客户端: import subprocess v1=subprocess.getoutput('ipconfig') # print(v1) value1=v1[2

京东联盟开发(5) 推广店铺采集

接口地址: https://media.jd.com/gotoadv/shop 方法 和 京东联盟开发(1) 商品SKUID采集 相同, 效果如下

phpcms v9采集中遇到的相对路径的问题

一.采集网址时,遇上网址是相对路径的问题.(网上抄的,可用) 修改数据库v9_collection_node,增加两个字段replace_from,replace_to(varchar(200)) 1. /phpcms/modules/collection/templates/node_form.tpl.php第99行后增加(位置在</table></fieldset>之前) <tr> <td width="120">网址替换:</

java调用phantomjs采集ajax加载生成的网页

java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应的内容,可是我的浏览器看到的内容明明是有的,于是浏览器查看源代码也发觉没有,此时想起该网页应该是ajax加载的.不知道ajax的小朋友可以去学下web开发啦. 采集ajax生成的内容手段不外乎两种.一种是通过http观察加载页面时候的请求,然后我们模仿该请求去得到对应的内容,第二种则是模仿浏览器行为

日志系统之Flume采集加morphline解析

概述 这段时间花了部分时间在处理消息总线跟日志的对接上.这里分享一下在日志采集和日志解析中遇到的一些问题和处理方案. 日志采集-flume logstash VS flume 首先谈谈我们在日志采集器上的选型.由于我们选择采用ElasticSearch作为日志的存储与搜索引擎.而基于ELK(ElasticSearch,Logstash,Kibana)的技术栈在日志系统方向又是如此流行,所以把Logstash列入考察对象也是顺理成章,Logstash在几大主流的日志收集器里算是后起之秀,被Elas

scrapy采集列表页的另一种方式

又是采集绿色下载站的最新软件,又是采用另一种方式(前两种是采用正则和xpath),呵呵 感觉有点像孔乙已的茴字有几种写法了 这回用CrawlSpider,Rule来配合采集 这次不用生成许多start_urls列表项了,可以按规则来自动读取,贴核心代码 # -*- coding: utf-8 -*- from scrapy.contrib.spiders import CrawlSpider,Rule from scrapy.selector import Selector from scrap

基于matlab的音频波形实时采集显示 v0.1

robj = audiorecorder(44100,16,1); %设置采样频率.采样位数.通道数 recordblocking(robj,1); %采集初步数据(1s长度) rdata = getaudiodata(robj); %获取音频数据 plot(rdata); %绘制波形 axis([1,44100,-0.1,0.1]); %设置固定坐标轴 drawnow %刷新显示 n = 100; %设定后续的采样更新次数,n与m可联合计算后续更新时间长度 m = 0.1; %设定更新间隔,m

C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

转自原文C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子) 阅读目录 1.HtmlAgilityPack简介 2.XPath技术介绍与使用 3.采集天气网站案例 4.资源 第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel,是真尼玛的累,虽然那个时候C#还很菜,也想能不能通过程序来批量获取(所以平时想法要多才好).几

Flume采集Nginx日志到HDFS

下载apache-flume-1.7.0-bin.tar.gz,用 tar -zxvf 解压,在/etc/profile文件中增加设置: export FLUME_HOME=/opt/apache-flume-1.7.0-bin export PATH=$PATH:$FLUME_HOME/bin 修改$FLUME_HOME/conf/下的两个文件,在flume-env.sh中增加JAVA_HOME: JAVA_HOME=/opt/jdk1.8.0_121 最重要的,修改flume-conf.pr

【网络爬虫】微信公众号采集

# WeixinCrawler 根据搜狗搜索 关键词采集 微信公众号和相应推文 采集策略:深度搜索采集 核心代码: package main; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.text.Si