php采集
2024-09-28 15:30:40
采集思路
采集程序的思路很简单大体可以分为以下几个步骤:
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);
/*打开指定的文件*/
$fp=@fopen($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增加)
最新文章
- linux内存使用计算方式
- C# 加密–RSA前端与后台的加密&;解密
- Android应用中使用及实现系统“分享”接口
- php redis 分布式类
- mysql 面向集合查询
- 已知json类型根据类型封装集合
- Grunt 插件开发与调式
- css布局: 两栏 自适应高度
- linux-0.11抠代码-GDB+VMWARE
- haproxy 看到的是https,后台是http的原因
- hibernate---一级缓存, 二级缓存, 查询缓存
- Python 爬取qqmusic音乐url并批量下载
- SequoiaDB x Spark 新主流架构引领企业级应用
- deeplearning.ai 人工智能行业大师访谈 Geoffrey Hinton 听课笔记
- 基于JS的WEB会议室预订拖拽式图形界面的实现
- FastDFS分布式文件系统&;Nginx负载均衡最小环境安装配置[超级详解]
- SQL 行转列的运用
- MySQL中间件之ProxySQL(4):多层配置系统
- JS实现对数器
- Star Schema and Snowflake Schema
热门文章
- C扩展php的方法(制作php扩展库)
- hdu3879 Base Station 最大权闭合子图 边权有正有负
- impala+hdfs+csv格式文件
- <;!--#include file= menu.shtml -->; 引用出现空白
- 解决在SharePoint 2010/2013部署自己的Event Handler后,抛出”不能载入被引用的第三方的程序集&;quot;的问题
- 安装tomcat出现failed to install tomcat6 service错误及解决方法(转载)
- mysql快速上手
- QT软件初次使用中遇到的若干问题及思考
- 在WPF的DataGrid中对行添加单击事件
- 第九篇:使用 lstat 函数获取文件信息