php获取网页内容方法
PHP用QueryList抓取网页内容

<?php require 'QueryList.class.php'; header('Content-type:text/html;charset=utf-8'); $url = '/xishuai/p/4715000.html'; //获取文章标题和内容 $reg = array( 'title'=>array('.postTitle','text'), //获取纯文本格式的标题 'content'=>array('#cnblogs_post_body','text') //获取纯文本的文章摘要 ); $rang = '#topics'; $hj = QueryList::Query($url,$reg,$rang,'curl','utf-8');
PHP用 QueryList抓取网页内容
之前抓取网页数据都是用Java Jsoup,前几天听说用PHP抓更方便,今天就简单研究了一下,主要是用QueryList来实现. QueryList是一个基于phpQuery的通用列表采集类,是一个简单、 灵活、强大的采集工具,采集任何复杂的页面 基本上就一句话就能搞定了.
// 抓取内容的div $rang = '.post_item'; $hj = QueryList::Query($url,$reg,$rang,'curl'); echo $hj->getJSON(); ?>
---------------------------------------------------------------------------
php读取文件内容的几种方法详解

php读取⽂件内容的⼏种⽅法详解⽰例代码1: ⽤file_get_contents 以get⽅式获取内容复制代码代码如下:<?php$url='/';$html=file_get_contents($url);//print_r($http_response_header);ec($html);printhr();printarr($http_response_header);printhr();>⽰例代码2: ⽤fopen打开url, 以get⽅式获取内容复制代码代码如下:<?$fp=fopen($url,'r');printarr(stream_get_meta_data($fp));printhr();while(!feof($fp)){$result.=fgets($fp,1024);}echo"url body:$result";printhr();fclose($fp);>⽰例代码3:⽤file_get_contents函数,以post⽅式获取url复制代码代码如下:<?php$data=array('foo'=>'bar');$data=http_build_query($data);$opts=array('http'=>array('method'=>'POST','header'=>"Content-type: application/x-www-form-urlencoded\r\n"."Content-Length: ".strlen($data)."\r\n",'content'=>$data),);$context=stream_context_create($opts);$html=file_get_contents('http://localhost/e/admin/test.html',false,$context);echo$html;>⽰例代码4:⽤fsockopen函数打开url,以get⽅式获取完整的数据,包括header和body复制代码代码如下:<?functionget_url($url,$cookie=false){$url=parse_url($url);$query=$url[path]."?".$url[query];ec("Query:".$query);$fp=fsockopen($url[host],$url[port]?$url[port]:80,$errno,$errstr,30);if(!$fp){$request="GET$queryHTTP/1.1\r\n";$request.="Host:$url[host]\r\n";$request.="Connection: Close\r\n";if($cookie)$request.="Cookie:$cookie\n";$request.="\r\n";fwrite($fp,$request);while(!@feof($fp)){$result.=@fgets($fp,1024);}fclose($fp);return$result;}}//获取url的html部分,去掉headerfunctionGetUrlHTML($url,$cookie=false){$rowdata=get_url($url,$cookie);if($rowdata){$body=stristr($rowdata,"\r\n\r\n");$body=substr($body,4,strlen($body));return$body;}returnfalse;}>⽰例代码5:⽤fsockopen函数打开url,以POST⽅式获取完整的数据,包括header和body 复制代码代码如下:<?functionHTTP_Post($URL,$data,$cookie,$referrer=""){// parsing the given URL$URL_Info=parse_url($URL);// Building referrerif($referrer=="")// if not given use this script. as referrer$referrer="111";// making string from $dataforeach($dataas$key=>$value)$values[]="$key=".urlencode($value);$data_string=implode("&",$values);// Find out which port is needed - if not given use standard (=80)if(!isset($URL_Info["port"]))$URL_Info["port"]=80;// building POST-request:$request.="POST ".$URL_Info["path"]." HTTP/1.1\n";$request.="Host: ".$URL_Info["host"]."\n";$request.="Referer:$referer\n";$request.="Content-type: application/x-www-form-urlencoded\n";$request.="Content-length: ".strlen($data_string)."\n";$request.="Connection: close\n";$request.="Cookie:$cookie\n";$request.="\n";$request.=$data_string."\n";$fp=fsockopen($URL_Info["host"],$URL_Info["port"]);fputs($fp,$request);while(!feof($fp)){$result.=fgets($fp,1024);}fclose($fp);return$result;>⽰例代码6:使⽤curl库,使⽤curl库之前,你可能需要查看⼀下php.ini,查看是否已经打开了curl扩展复制代码代码如下:<?$ch = curl_init();$timeout = 5;curl_setopt ($ch, CURLOPT_URL, '/');curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);$file_contents = curl_exec($ch);curl_close($ch);echo $file_contents;>关于curl库:curl官⽅⽹站http://curl.haxx.se/curl 是使⽤URL语法的传送⽂件⼯具,⽀持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。
php curl 抓取页面几种方法介绍

php curl 抓取页面几种方法介绍curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents 等。
但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了。
是把PHP的主页取回放到一个文件中。
例1. 使用PHP的CURL模块取回PHP主页代码如下复制代码<?php$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://localhost/mytest/phpinfo.php");curl_setopt($ch, CURLOPT_HEADER, false);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出 $result=curl_exec($ch);curl_close($ch);2,使用代理进行抓取为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了。
google对你的ip地址做限制这个时候,你可以换代理重新抓。
代码如下复制代码<?php$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "");curl_setopt($ch, CURLOPT_HEADER, false);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080);//url_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');如果要密码的话,加上这个 $result=curl_exec($ch);curl_close($ch);?>3,post数据后,抓取数据单独说一下数据提交数据,因为用curl的时候,很多时候会有数据交互的,所以比较重要的。
php解析url并得到url中的参数及获取url参数的四种方式

php解析url并得到url中的参数及获取url参数的四种⽅式下⾯通过四种实例给⼤家介绍php url 参数获取⽅式。
在已知URL参数的情况下,我们可以根据⾃⾝情况采⽤$_GET来获取相应的参数信息($_GET['name']);那,在未知情况下如何获取到URL 上的参数信息呢?第⼀种、利⽤$_SERVER内置数组变量相对较为原始的$_SERVER['QUERY_STRING']来获取,URL的参数,通常使⽤这个变量返回的会是类似这样的数据:name=tank&sex=1如果需要包含⽂件名的话可以使⽤$_SERVER["REQUEST_URI"](返回类似:/index.php?name=tank&sex=1)第⼆种、利⽤pathinfo内置函数代码如下:<?php$test = pathinfo("http://localhost/index.php");print_r($test);/*结果如下Array([dirname] => http://localhost //url的路径[basename] => index.php //完整⽂件名[extension] => php //⽂件名后缀[filename] => index //⽂件名)*/>第三种、利⽤parse_url内置函数代码如下:<?php$test = parse_url("http://localhost/index.php?name=tank&sex=1#top");print_r($test);/*结果如下Array([scheme] => http //使⽤什么协议[host] => localhost //主机名[path] => /index.php //路径[query] => name=tank&sex=1 // 所传的参数[fragment] => top //后⾯根的锚点)*/>第四种、利⽤basename内置函数代码如下:<?php$test = basename("http://localhost/index.php?name=tank&sex=1#top");echo $test;/*结果如下index.php?name=tank&sex=1#top*/>另外,还有就是⾃⼰通过正则匹配的处理⽅式来获取需要的值了。
PHP采集静态页面并把页面css,img,js保存的方法

PHP采集静态页⾯并把页⾯css,img,js保存的⽅法本⽂实例讲述了PHP采集静态页⾯并把页⾯css,img,js保存的⽅法。
分享给⼤家供⼤家参考。
具体分析如下:这是⼀个可以获取⽹页的html代码以及css,js,font和img资源的⼩⼯具,主要⽤来快速获取模板,如果你来不及设计UI或者看到不错的模板,则可以使⽤这个⼯具来抓取⽹页和提取资源⽂件,提取的内容会按相对路径来保存资源,因此你不必担⼼资源⽂件的错误url导⼊.⾸页 index.php,代码如下:复制代码代码如下:<!DOCTYPE html><html><head><meta name="author" content="flute" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>⽹页抓取器</title><link rel="stylesheet" href="main.css" media="all" /><script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="main.js"></script></head><body><h1>Web Grabber</h1><hr /><div class="box"><h2>Url</h2><div class="form"><input type="text" id="project" value="projectname" /><input type="text" id="url" value="http://" size="60" /><button class="submit" type="button">Get</button><span id="tip"></span></div></div><div class="box"><span class="all" id="saveall">Save All</span><h2>List</h2><ul id="list"></ul></div></body></html>抓取页⾯代码 grab.php,代码如下:复制代码代码如下:<?PHP/** flute* 2014/03/31*/if(isset($_POST['url'])) {if(isset($_POST['project']) && !is_dir($_POST['project'])) mkdir($_POST['project'], 0777);echo json_encode(grab($_POST['url']));}function grab($url) {//$url = '/uploads/leaves/test.html';$data = array();$file = preg_replace('/^.*//', '', $url);if(($content = file_get_contents($url)) !== false) {if(isset($_POST['project'])) file_put_contents($_POST['project'].'/'.$file, $content);$pattern = '/<link.*?href=('|")(.*?.css)1.*?>/i';if(preg_match_all($pattern, $content, $matches)) {$data['css'] = $matches[2];}$pattern = '/<script.*?src=('|")(.*?.js)1.*?>/i';if(preg_match_all($pattern, $content, $matches)) {$data['js'] = $matches[2];}$pattern = '/<img.*?src=('|")(.*?)1.*?>/i';if(preg_match_all($pattern, $content, $matches)) {$data['img'] = $matches[2];}$pattern = '/url(('|"|s)(.*?)1)/i';if(preg_match_all($pattern, $content, $matches)) {$data['src'] = $matches[2];}}return $data;}function vardump($obj) {echo '<pre>';print_r($obj);echo '</pre>';}>保存css,js,img等资源的页⾯ save.php,代码如下:复制代码代码如下:<?PHP/** flute* 2014/03/31*/if(isset($_POST['url']) && isset($_POST['project']) && isset($_POST['domain'])) { extract($_POST);$url = preg_replace('/?.*$/', '', $url);$file = $url;$arr = explode('/', $file);$length = sizeof($arr);$filename = $arr[$length - 1];$root = $project;$dir = $root;if($domain == 'http') {$dir = $root.'/http';if(!is_dir($dir)) mkdir($dir, 0777);} else {$file = $domain.'/'.$url;for($i = 0; $i < $length -1; $i++) {if(!emptyempty($arr[$i])) {$dir .= '/'.$arr[$i];if(!is_dir($dir)) mkdir($dir, 0777);}}if(!file_exists($dir.'/'.$filename) || filesize($dir.'/'.$filename) == 0) {$content = file_get_contents($file);file_put_contents($dir.'/'.$filename, $content);}}>使⽤⽅法:1. 打开index页,输⼊项⽬名和要抓取的⽹址,⽹址必须是⽂件名结尾,如index.html;2. 点Get按钮,得到当前页⾯所有的css,js,img等资源列表;3. 点击css链接会获取css⽂件中的背景资源图⽚,附加在列表后头;4. 点击Save All即可保存列表中所有的⽂件,并按相对路径⽣成;5. 如果⽹页上有http远程⽂件,将会直接保存在http⽂件夹下;6. Get和Save有时会失败,没关系重试⼏次即可。
php获取标签内容的方法

php获取标签内容的方法方法一:使用正则表达式PHP中可以使用正则表达式来匹配HTML标签,并提取其中的内容。
具体步骤如下:1. 使用file_get_contents函数读取HTML页面的内容,并保存在一个变量中。
2. 使用正则表达式来匹配指定的标签,例如匹配标题标签可以使用正则表达式"/<title>(.*?)<\/title>/"。
3. 使用preg_match函数来进行匹配,并将结果保存在一个变量中。
如果匹配成功,该变量将包含匹配到的标签内容。
4. 最后,可以通过echo语句将标签内容输出到页面上。
下面是一个示例代码:```php$html = file_get_contents('example.html');$pattern = '/<title>(.*?)<\/title>/';preg_match($pattern, $html, $matches);$title = $matches[1];echo $title;```方法二:使用DOM解析器PHP中提供了DOM解析器,可以方便地解析HTML文档,并提取其中的标签内容。
具体步骤如下:1. 使用DOMDocument类来加载HTML页面,并创建一个DOM 对象。
2. 使用DOM对象的getElementsByTagName方法来获取指定标签的元素集合。
3. 遍历元素集合,可以通过nodeValue属性来获取标签的内容。
4. 最后,可以通过echo语句将标签内容输出到页面上。
下面是一个示例代码:```php$doc = new DOMDocument();$doc->loadHTMLFile('example.html');$titles = $doc->getElementsByTagName('title');foreach ($titles as $title) {echo $title->nodeValue;}```方法三:使用XPathXPath是一种用于在XML文档中定位节点的语言,也可以用于HTML文档的解析。
php抓取页面的几种方法

php抓取页面的几种方法在做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址,然后得到html源代码或者xml数据,得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来。
下面梳理了php抓取页面的几种方法,供大家参考借鉴。
下面简单说一下php抓取页面的几种方法及原理:一、PHP抓取页面的主要方法:1.file()函数2.file_get_contents()函数3.fopen()->fread()->fclose()模式4.curl方式5.fsockopen()函数socket模式6.使用*件(如:sourceforge/projects/snoopy/)二、PHP解析html或xml代码主要方式:1.file()函数<?php$url='t.qq';$lines_array=file($url);$lines_string=implode('',$lines_array);echohtmlspecialchars($lines_string);2.file_get_contents()函数使用file_get_contents和fopen必须空间开启allow_url_fopen。
方法:编辑php.ini,设置allow_url_fopen=On,allow_url_fopen 关闭时fopen和file_get_contents都不能打开远程文件。
<?php$url='t.qq';$lines_string=file_get_contents($url);echohtmlspecialchars($lines_string);3.fopen()->fread()->fclose()模式<?php$url='t.qq';$handle=fopen($url,"rb");$lines_string="";do{$data=fread($handle,1024);if(strlen($data)==0){break;}$lines_string.=$data;}while(true);fclose($handle);echohtmlspecialchars($lines_string);4.curl方式使用curl必须空间开启curl。
php采集网站数据方法及思路

php采集网站数据方法及思路如何在这庞大的互联网中获取自己的需要的信息呢?可以通过学习一下专业的技能来实现,比如,php采集,用php语言写的web程序,运行于支持php的平台上。
这样就可以达到采集的目的。
所以通常所说的php采集就是使用PHP程序,把其他网站中的信息抓取到我们自己的数据库中、网站中。
一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址,然后得到html源代码或者xml数据,得到数据后我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来。
下面就简单介绍一下php采集页面的几种方法及原理:一、PHP采集页面的主要方法:file()函数file_get_contents()函数fopen()->fread()->fclose()模式curl方式fsockopen()函数socket模式使用插件(如:/projects/snoopy/)二、PHP解析html或xml代码主要方式:1、file()函数** file_get_contents()函数**使用file_get_contents和fopen必须空间开启allow_url_fopen。
方法:编辑php.ini,设置allow_url_fopen = On,allow_url_fopen关闭时fopen 和file_get_contents都不能打开远程文件。
fopen()->fread()->fclose()模式2、curl方式curl把HTTP协议都封装成了很多函数,直接传相应参数即可,降低了编写HTTP 协议字符串的难度。
使用curl必须空间开启curl。
方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且需要拷贝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安装c url扩展。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.file_get_contents获取网页内容
<?php
$url = "";
$contents = file_get_contents($url);
//如果出现中文乱码使用下面代码
//$getcontent = iconv("gb2312", "utf-8",$contents);
echo $contents;
?>
2.curl获取网页内容
<?php
$url = "";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
//在需要用户检测的网页里需要增加下面两行
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($ch, CURLOPT_USERPWD, US_NAME.":".US_PWD); $contents = curl_exec($ch);
curl_close($ch);
echo $contents;
?>
3.fopen->fread->fclose获取网页内容
<?php
$handle = fopen ("", "rb");
$contents = "";
do {
$data = fread($handle, 1024);
if (strlen($data) == 0) {
break;
}
$contents .= $data;
} while(true);
fclose ($handle);
echo $contents;
4,socket获取网页内容
<?php
function GETBySocket($URL, $port=80) {
//get host from url
preg_match('/\/\/.*\//sU',$URL,$host_array);
if(!$host_array[0]) {
$URL.='/';
preg_match('/\/\/.*\//sU',$URL,$host_array);
}
$host=substr($host_array[0],2,-1);
//connect
$fp = stream_socket_client("$host:$port", $errcode, $errstr, 1);// or die("get ". $host ." failed");
//
$header = "GET ". $URL. " HTTP/1.1\r\n";
$header .= "Accept: */*\r\n";
$header .= "Accept-Language: zh-cn\r\n";
//$header .= "HTTP_CONNECTION: Keep-Alive\r\n";
$header .= "HTTP_ACCEPT: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png, */*;q=0.5\r\n";
$header .= "HTTP_ACCEPT_CHARSET: gbk,*,utf-8\r\n";
//$header .= "Accept-Encoding: gzip, deflate\r\n";
$header .= "User-Agent: Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1;)\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";
stream_socket_sendto($fp, $header);
///////////////////$content=stream_socket_recvfrom($fp,1000,STREAM_PEEK);
$content=stream_get_contents($fp);
fclose($fp);
$position_header=strpos($content, "\r\n\r\n");
if (stripos(substr($content, 0 ,$position_header), 'Transfer-Encoding: chunked')) { return substr($content, strpos($content, "\r\n", $position_header +4)+2);
} else {
return substr($content, $position_header +4);
}
}
echo GETBySocket('/');
注:
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扩展。