干货教程:php自动采集教程(python数据采集代码)

优采云 发布时间: 2022-11-14 12:16

  干货教程:php自动采集教程(python数据采集代码)

  方法一,_POST美元

  $_POST 或 $_REQUEST 以 key=>value 的形式存储由 PHP 格式化的数据。

  方法二,使用file_get_contents(“php://input”)。

  对于未指定内容类型的 POST 数据,可以使用 file_get_contents (“php://input”)来获取原创数据。

  

  事实上,在PHP中接收POST的任何数据都使用这种方法。无论内容类型如何,都可以包括二进制流。

  与$HTTP_RAW_POST_DATA相比,它对内存的压力较小,并且不需要任何特殊的PHP.ini设置。

  php://input 无法使用内容类型多部分/表单数据读取 POST 数据,则需要将 php .ini中的always_populate_raw_post_data值设置为 On。

  php://input 读取的数据少于 _GET 美元。这是因为 $_GET 数据以query_path的形式写入 http 请求标头的 PATH 字段中,而不是写入 http 请求的正文部分。

  对于第三种方法,请使用全局变量 $GLOBALS['HTTP_RAW_POST_DATA']。

  

  $GLOBALS['HTTP_RAW_POST_DATA'] 是来自 POST 的原创数据。

  但是,是否将开机自检数据保存在$GLOBALS['HTTP_RAW_POST_DATA']

  取决于中心类型设置,并且只有当 PHP 无法识别 Content-Type 时,才会将 POST 数据填充到变量 $GLOBALS['HTTP_RAW_POST_DATA'] 中,例如 Content-Type= 当应用程序/x-www-form-urlencoded 时,此变量为空。

  此外,它还

  不能读取 Content-Type multipart/form-data 的 POST 数据,还需要将 php .ini中的 always_populate_raw_post_data 值设置为 On,PHP 总是会将 POST 数据填充到变量 $http_raw_post_data 中。

  最佳实践:php curl 防止采集

  1.根据关键字采集百度搜索结果

  根据关键字采集百度搜索结果,可以使用curl实现,代码如下:

  函数 doCurl($url, $data=array(), $header=array(), $timeout=30){

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);

  curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

  curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

  $response = curl_exec($ch);

  if($error=curl_error($ch)){

  死($错误);

  }

  curl_close($ch);

  返回$响应;

  }

  $wd = '仙剑奇侠传';

  $url = '#39;.urlencode($wd);

  $数据 = 数组();

  $标头=数组();

  $response = doCurl($url, $data, $header, 5);

  回声$响应;

  输出后发现有些图片无法显示

  2.采集后的图片不显示的原因分析

  直接在百度搜索,页面可以显示图片。使用firebug查看图片路径,发现采集的图片域名和百度搜索的图片域名不一样。

  采集返回的图片域名

  正常搜索图片域名

  查看采集和正常搜索html,发现有一个域名转换js不一样

  采集

  变量列表 = {

  "": "",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  };

  普通搜索

  变量列表 = {

  

  "": "",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  };

  因此可以得出结论,根据源地址、IP、header等参数,百度判断如果是采集,就会返回不同的js。

  3. 采集后图片不显示的解决方法

  只需根据定义的域名批量转换采集中的html即可。

  函数 doCurl($url, $data=array(), $header=array(), $timeout=30){

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);

  curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

  curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

  $response = curl_exec($ch);

  if($error=curl_error($ch)){

  死($错误);

  }

  curl_close($ch);

  返回$响应;

  }

  // 域名转换

  函数 cdomain($str){

  $baidu_domain = '{

  "": "",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  "":"",

  “”:“”

  }';

  $domain = json_decode($baidu_domain, true);

  foreach($domain as $k=>$v){

  $str = str_replace($k, $v, $str);

  }

  返回 $str;

  }

  $wd = '仙剑奇侠传';

  $url = '#39;.urlencode($wd);

  $数据 = 数组();

  $标头=数组();

  $response = doCurl($url, $data, $header, 5);

  回声 cdomain($response); //调用域名转换

  添加域名转换后,所有图片都可以正常显示。

  以上就是小编介绍的PHP CURL采集百度搜索结果图片不显示问题的解决方法。我希望它对你有帮助。有任何问题请给我留言,小编会及时回复。我们的。还要感谢大家对脚本之家网站的支持!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线