GVKun编程网logo

php使用服务器进行远程抓取百度网页内容(php使用服务器进行远程抓取百度网页内容)

24

对于php使用服务器进行远程抓取百度网页内容感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解php使用服务器进行远程抓取百度网页内容,并且为您提供关于phpcurl抓取网页内容简单示例、ph

对于php使用服务器进行远程抓取百度网页内容感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解php使用服务器进行远程抓取百度网页内容,并且为您提供关于php curl抓取网页内容简单示例、php – 如何在抓取网页时将网页内容转换为一致的字符集?、php 抓取网页内容与图片的方法、php 模拟用户抓取网页内容程序的宝贵知识。

本文目录一览:

php使用服务器进行远程抓取百度网页内容(php使用服务器进行远程抓取百度网页内容)

php使用服务器进行远程抓取百度网页内容(php使用服务器进行远程抓取百度网页内容)

   PHP使用服务器进行远程抓取百度网页内容

<?PHP
error_reporting(E_ALL^E_NOTICE^E_WARNING);
$useragent= $_SERVER['HTTP_USER_AGENT'];
//获取客户端ip
function getip() { 
    $unkNown = 'unkNown'; 
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unkNown)) { 
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unkNown)) { 
        $ip = $_SERVER['REMOTE_ADDR']; 
    } 
    if (false !== strpos($ip, ',')) $ip = reset(explode(',', $ip)); 
    return $ip; 
} 

function get_client_ip(){
    $cip = "unkNown";
    if($_SERVER['REMOTE_ADDR']){
        $cip = $_SERVER['REMOTE_ADDR'];
    }else if(getenv("REMOTE_ADDR")){
        $cip = getenv("REMOTE_ADDR");
    }
    return $cip;
}

//添加关键词
$word=[
 '医院',
];
$arrword=$word[mt_rand(0,count($word)-1)];
$keyword= urlencode($arrword);
$url = "http://m.baidu.com/s?word=".$keyword;
//$url = "http://www.sdfymj.com/ua.PHP";
// 构造包头,模拟浏览器请求
$header = array (
		"Host:www.baidu.com",
		"Content-Type:application/x-www-form-urlencoded",//post请求
		"Connection: keep-alive",
		'Referer:http://m.baidu.com/'
		
);
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.getip(), 'CLIENT-IP:'.get_client_ip()));
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
// 执行
$content = curl_exec ( $ch );
if ($content == FALSE) {
	echo "error:" . curl_error ( $ch );
}
// 关闭
curl_close ( $ch );
 
//输出结果
echo $content;
?>

  

php curl抓取网页内容简单示例

php curl抓取网页内容简单示例

<?php

	function get_file($url){
		// 初始化
		$ch = curl_init();
		// 设置要获取内容的url
		curl_setopt($ch, CURLOPT_URL, $url);
		// 设置内容不直接输出
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		// 抓取内容
		$res = curl_exec($ch);
		// 关闭资源
		curl_close($ch);

		return $res;

	}

	echo get_file(''www.baidu.com'');

 

php – 如何在抓取网页时将网页内容转换为一致的字符集?

php – 如何在抓取网页时将网页内容转换为一致的字符集?

我已经做了很多关于这个和很多测试的研究. @H_301_5@

@H_301_5@据我了解,只有在设置Web服务器时才设置HTTP标头,并且即使开发人员不打算这样做,也可能默认为特定编码.只有当开发人员决定在他们的代码中这样做时才会设置元标题…这也可能由某些开发框架自动设置(如果开发人员不考虑这个问题,则会出现问题).

@H_301_5@我发现,如果这些设置完全存在,它们往往会相互冲突.例如. HTTP标头表示页面是iso-8859-1,而Meta标签指定了windows-1252.我可以假设一个取代另一个(可能是元标记),但这似乎相当不可靠.在处理他们的数据时,似乎很少有开发人员会考虑这一点,因此动态生成的站点通常会混合编码或使用他们不打算通过来自其数据库的不同编码来编码的编码.

@H_301_5@我的结论是做了以下事情:

@H_301_5@>使用mb_detect_encoding()检查每个页面的编码.
>如果失败,我使用元编码(http-equiv =“Content-Type”…).
>如果没有元内容类型,我使用HTTP标头(content_type).
>如果没有http内容类型,我假设为UTF-8.
>最后,我使用mb_convert_encoding()转换文档.然后我抓了它的内容. (我故意省略了要转换的编码,以避免在此讨论.)

@H_301_5@我试图获得尽可能多的准确内容,而不仅仅是忽略网页,因为开发人员没有正确设置标题.

@H_301_5@你用这种方法看到了什么问题?

@H_301_5@我是否会使用mb_detect_encoding()和mb_convert_encoding()方法遇到问题?

解决方法

是的,你会遇到问题. mb_detect_encoding不太可靠,请看这些例子: @H_301_5@

@H_301_5@这会输出bool(false),表示检测失败:

@H_301_5@

var_dump(mb_detect_encoding(file_get_contents('http://www.pazaruvaj.com/')));
@H_301_5@另一个输出字符串(5)“UTF-8”,这显然是不正确的结果. HTTP标头和http-equiv在本网站上正确设置,并且它无效UTF-8:

@H_301_5@

var_dump(mb_detect_encoding(file_get_contents('http://www.arukereso.hu/')));
@H_301_5@我建议你应用所有可用的方法,并使用外部库(如下一个:http://mikolajj.republika.pl/)并使用最可能的编码.

@H_301_5@另一种使其更精确的方法是建立一个特定国家/地区的可能字符集列表,并仅使用mb_convert_encoding.与匈牙利一样,ISO-8859-2或UTF-8最有可能,其他人则不值得考虑.可以通过TLD,Content-Language HTTP标头和IP地址位置的组合来猜测国家/地区.虽然这需要一些研究工作和额外的开发,但值得努力.

@H_301_5@mb_convert_encoding文档中的一些评论报告说iconv对日语字符集更有效.

php 抓取网页内容与图片的方法

php 抓取网页内容与图片的方法

这篇文章主要介绍了关于php 抓取网页内容与图片的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

例子1:

<?php  include_once("curl.php");/*这个文件要自己配置好*/
 header("content-type:text/html;charset=utf8");
  $pattern_title ="/<title>(.+)/title&gt;/";//标题匹配
  $pattern_code = "/<tr><td>
<p>(.+)/p&gt;<script></script>";
 }
 echo "</p>
<hr>";
 
 /*$trans = array("  "=&gt;",", "<br>"=&gt;"。");
 $TRANS_CONTENT = strtr($DATA_CONTENT, $trans);
 echo $TRANS_CONTENT;
 */
 
$DATA_CONTENT=preg_replace(''//s(?=/s)/'', '' '', $DATA_CONTENT);//(?=pattern) 正向预查
   $DATA_CONTENT=preg_replace(''/[/n/r/t]/'', ''/r/n'', $DATA_CONTENT);//回车换行
   $DATA_CONTENT=preg_replace(''/ /'', '' '', $DATA_CONTENT); 


 $num=preg_match_all($pattern_code, $DATA_CONTENT, $match_code);
 
 for($i=0;$i";  
 }
 
?&gt;<p>例子2:<br></p><pre> <?php
/*
author: ssh_kobe
date: 20110615
*/
set_time_limit(0);//抓取不受时间限制
function get_pic($pic_url) {
//获取图片二进制流
$data=CurlGet($pic_url);
/*利用正则表达式得到图片链接
$pattern_src = &#39;/<img .*?\"([^\"]*(jpg|bmp|jpeg|gif)).*? alt="php 抓取网页内容与图片的方法" >/&#39;;*/
$pattern_src = &#39;/<img .*?src\=\"(.*\.jpg).*? alt="php 抓取网页内容与图片的方法" >/&#39;;//只匹配jpg格式的图片
$num = preg_match_all($pattern_src, $data, $match_src);
$arr_src=$match_src[1];//获得图片数组
//get_name($arr_src);
get_name_2($arr_src);
echo &#39;End!!!<br>&#39;;
return 0;
}
function get_pic_2($pic_url, $base_site) {
//获取图片二进制流
$data=CurlGet($pic_url);
/*利用正则表达式得到图片链接*/
$pattern_src = &#39;/<img .*?\"([^\"]*jpg).*? alt="php 抓取网页内容与图片的方法" >/&#39;;//只匹配jpg格式的图片
$num = preg_match_all($pattern_src, $data, $match_src);
$arr_src=$match_src[1];//获得图片数组
$arr_src=rev_site($arr_src, $base_site);
get_name($arr_src);
echo &#39;End!!!<br>&#39;;
return 0;
}
/* 将图片相对地址改为绝对地址 */
function rev_site($site_list, $base_site){
    foreach($site_list as $site_item) {
        if (preg_match(&#39;/^http/&#39;, $site_item)) {
            $return_list[] = $site_item;
        }else{
            $return_list[] = $base_site.$site_item;
}
    }
    return $return_list;
}
/*得到图片类型,并将其保存到与该文件同一目录*/
function get_name($pic_arr)
{
    //图片类型
$pattern_type = &#39;/(\.(jpg|bmp|jpeg|gif|png))/&#39;;    
    foreach($pic_arr as $pic_item){//循环取出每幅图的地址
        $num = preg_match_all($pattern_type,$pic_item,$match_type);
        $pic_name = get_unique().$match_type[1][0];//改时微秒时间戳命名
        //以流的形式保存图片
        $write_fd = @fopen($pic_name,"wb");        
        @fwrite($write_fd, CurlGet($pic_item));
        @fclose($write_fd);
        echo "OK..";
    }
    return 0;
}
function get_name_2($pic_arr)
{
    //图片编号和类型
$pattern_type = &#39;/.*\/(.*?)$/&#39;;    
    foreach($pic_arr as $pic_item){//循环取出每幅图的地址
        $num = preg_match_all($pattern_type,$pic_item,$match_type);
        //以流的形式保存图片
        $write_fd = @fopen($match_type[1][0],"wb");        
        @fwrite($write_fd, CurlGet($pic_item));
        @fclose($write_fd);
        echo &#39;OK..&#39;;
    }
    return 0;
}
//通过微秒时间获得唯一ID
function get_unique(){
list($msec, $sec) = explode(" ",microtime());
return $sec.intval($msec*1000000);
}
//抓取网页内容
function CurlGet($url){ 
$url=str_replace(&#39;&&#39;,&#39;&&#39;,$url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
//curl_setopt($curl, CURLOPT_REFERER,$url);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; SeaPort/1.2; Windows NT 5.1; SV1; InfoPath.2)");
curl_setopt($curl, CURLOPT_COOKIEJAR, &#39;cookie.txt&#39;);
curl_setopt($curl, CURLOPT_COOKIEFILE, &#39;cookie.txt&#39;);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
$values = curl_exec($curl);
curl_close($curl);
return $values;
}
?>
登录后复制

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

php打包zip图片下载的方法

立即学习“PHP免费学习笔记(深入)”;

php web请求安全处理

以上就是php 抓取网页内容与图片的方法的详细内容,更多请关注php中文网其它相关文章!

php 模拟用户抓取网页内容程序

php 模拟用户抓取网页内容程序

<script>ec(2);</script>
 代码如下 复制代码

function _link($url){
 $contents = @file_get_contents("$url");
 if($contents=="Forbidden" || $contents==""){
  $ch = curl_init();
  $timeout = 5;
  curl_setopt ($ch, CURLOPT_URL, "$url");
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $contents = curl_exec($ch);
  curl_close($ch);
 }
 if(empty($contents)){
  exit(''cant locaion.'');
 }
 preg_match_all("/charset=(.*?)>/is",$contents,$cod);
 if(!empty($cod[1][0])){
  if(preg_match("/utf-8/i",$cod[1][0])){
   $contents=iconv("UTF-8","gbk//TRANSLIT",$contents);
  }
 }
 return $contents;
}

我们今天的关于php使用服务器进行远程抓取百度网页内容php使用服务器进行远程抓取百度网页内容的分享就到这里,谢谢您的阅读,如果想了解更多关于php curl抓取网页内容简单示例、php – 如何在抓取网页时将网页内容转换为一致的字符集?、php 抓取网页内容与图片的方法、php 模拟用户抓取网页内容程序的相关信息,可以在本站进行搜索。

本文标签: