PHP CURL采集百度搜寻结果图片不显示问题的解决方法


Posted in PHP onFebruary 03, 2017

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

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

<?php
function 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)){
    die($error);
  }
  curl_close($ch);
  return $response;
}
$wd = '仙剑奇侠传';
$url = 'http://www.baidu.com/s?wd='.urlencode($wd);
$data = array();
$header = array();
$response = doCurl($url, $data, $header, 5);
echo $response;
?>

输出后发现有部分图片不能显示

PHP CURL采集百度搜寻结果图片不显示问题的解决方法 

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

直接在百度中搜寻,页面是可以显示图片的。使用firebug查看图片路径,发现采集的图片域名与在百度搜寻的图片域名不同。

采集返回的图片域名 t11.baidu.com

PHP CURL采集百度搜寻结果图片不显示问题的解决方法 

正常搜寻的图片域名 ss1.baidu.com

PHP CURL采集百度搜寻结果图片不显示问题的解决方法 

查看采集与正常搜寻的html,发现有个域名转换的js是不一样的

采集

var list = {
    "graph.baidu.com": "http://graph.baidu.com",
    "t1.baidu.com":"http://t1.baidu.com",
    "t2.baidu.com":"http://t2.baidu.com",
    "t3.baidu.com":"http://t3.baidu.com",
    "t10.baidu.com":"http://t10.baidu.com",
    "t11.baidu.com":"http://t11.baidu.com",
    "t12.baidu.com":"http://t12.baidu.com",
    "i7.baidu.com":"http://i7.baidu.com",
    "i8.baidu.com":"http://i8.baidu.com",
    "i9.baidu.com":"http://i9.baidu.com",
};

正常搜寻

var list = {
    "graph.baidu.com": "https://sp0.baidu.com/-aYHfD0a2gU2pMbgoY3K",
    "t1.baidu.com":"https://ss0.baidu.com/6ON1bjeh1BF3odCf",
    "t2.baidu.com":"https://ss1.baidu.com/6OZ1bjeh1BF3odCf",
    "t3.baidu.com":"https://ss2.baidu.com/6OV1bjeh1BF3odCf",
    "t10.baidu.com":"https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq",
    "t11.baidu.com":"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq",
    "t12.baidu.com":"https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq",
    "i7.baidu.com":"https://ss0.baidu.com/73F1bjeh1BF3odCf",
    "i8.baidu.com":"https://ss0.baidu.com/73x1bjeh1BF3odCf",
    "i9.baidu.com":"https://ss0.baidu.com/73t1bjeh1BF3odCf",
};

因此可以断定是,百度根据来源地址、IP、header等参数,判断如果是采集的,则返回不同的js。

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

把采集到的html,根据定义的域名做一次批量转换即可。

<?php
function 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)){
    die($error);
  }
  curl_close($ch);
  return $response;
}
// 域名转换
function cdomain($str){
  $baidu_domain = '{
    "http://graph.baidu.com": "https://sp0.baidu.com/-aYHfD0a2gU2pMbgoY3K",
    "http://p.qiao.baidu.com":"https://sp0.baidu.com/5PoXdTebKgQFm2e88IuM_a",
    "http://vse.baidu.com":"https://sp3.baidu.com/6qUDsjip0QIZ8tyhnq",
    "http://hdpreload.baidu.com":"https://sp3.baidu.com/7LAWfjuc_wUI8t7jm9iCKT-xh_",
    "http://lcr.open.baidu.com":"https://sp2.baidu.com/8LUYsjW91Qh3otqbppnN2DJv",
    "http://kankan.baidu.com":"https://sp3.baidu.com/7bM1dzeaKgQFm2e88IuM_a",
    "http://xapp.baidu.com":"https://sp2.baidu.com/yLMWfHSm2Q5IlBGlnYG",
    "http://dr.dh.baidu.com":"https://sp0.baidu.com/-KZ1aD0a2gU2pMbgoY3K",
    "http://xiaodu.baidu.com":"https://sp0.baidu.com/yLsHczq6KgQFm2e88IuM_a",
    "http://sensearch.baidu.com":"https://sp1.baidu.com/5b11fzupBgM18t7jm9iCKT-xh_",
    "http://s1.bdstatic.com":"https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K",
    "http://olime.baidu.com":"https://sp0.baidu.com/8bg4cTva2gU2pMbgoY3K",
    "http://app.baidu.com":"https://sp2.baidu.com/9_QWsjip0QIZ8tyhnq",
    "http://i.baidu.com":"https://sp0.baidu.com/74oIbT3kAMgDnd_",
    "http://c.baidu.com":"https://sp0.baidu.com/9foIbT3kAMgDnd_",
    "http://sclick.baidu.com":"https://sp0.baidu.com/5bU_dTmfKgQFm2e88IuM_a",
    "http://nsclick.baidu.com":"https://sp1.baidu.com/8qUJcD3n0sgCo2Kml5_Y_D3",
    "http://sestat.baidu.com":"https://sp1.baidu.com/5b1ZeDe5KgQFm2e88IuM_a",
    "http://eclick.baidu.com":"https://sp3.baidu.com/-0U_dTmfKgQFm2e88IuM_a",
    "http://api.map.baidu.com":"https://sp2.baidu.com/9_Q4sjOpB1gCo2Kml5_Y_D3",
    "http://ecma.bdimg.com":"https://ss1.bdstatic.com/-0U0bXSm1A5BphGlnYG",
    "http://ecmb.bdimg.com":"https://ss0.bdstatic.com/-0U0bnSm1A5BphGlnYG",
    "http://t1.baidu.com":"https://ss0.baidu.com/6ON1bjeh1BF3odCf",
    "http://t2.baidu.com":"https://ss1.baidu.com/6OZ1bjeh1BF3odCf",
    "http://t3.baidu.com":"https://ss2.baidu.com/6OV1bjeh1BF3odCf",
    "http://t10.baidu.com":"https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq",
    "http://t11.baidu.com":"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq",
    "http://t12.baidu.com":"https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq",
    "http://i7.baidu.com":"https://ss0.baidu.com/73F1bjeh1BF3odCf",
    "http://i8.baidu.com":"https://ss0.baidu.com/73x1bjeh1BF3odCf",
    "http://i9.baidu.com":"https://ss0.baidu.com/73t1bjeh1BF3odCf",
    "http://b1.bdstatic.com":"https://ss0.bdstatic.com/9uN1bjq8AAUYm2zgoY3K",
    "http://ss.bdimg.com":"https://ss1.bdstatic.com/5aV1bjqh_Q23odCf",
    "http://opendata.baidu.com":"https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv",
    "http://api.open.baidu.com":"https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv",
    "http://tag.baidu.com":"https://sp1.baidu.com/6LMFsjip0QIZ8tyhnq",
    "http://f3.baidu.com":"https://sp2.baidu.com/-uV1bjeh1BF3odCf",
    "http://s.share.baidu.com":"https://sp0.baidu.com/5foZdDe71MgCo2Kml5_Y_D3",  
    "http://bdimg.share.baidu.com":"https://ss1.baidu.com/9rA4cT8aBw9FktbgoI7O1ygwehsv",
    "http://1.su.bdimg.com":"https://ss0.bdstatic.com/k4oZeXSm1A5BphGlnYG",
    "http://2.su.bdimg.com":"https://ss1.bdstatic.com/kvoZeXSm1A5BphGlnYG",
    "http://3.su.bdimg.com":"https://ss2.bdstatic.com/kfoZeXSm1A5BphGlnYG",
    "http://4.su.bdimg.com":"https://ss3.bdstatic.com/lPoZeXSm1A5BphGlnYG",
    "http://5.su.bdimg.com":"https://ss0.bdstatic.com/l4oZeXSm1A5BphGlnYG",
    "http://6.su.bdimg.com":"https://ss1.bdstatic.com/lvoZeXSm1A5BphGlnYG",
    "http://7.su.bdimg.com":"https://ss2.bdstatic.com/lfoZeXSm1A5BphGlnYG",
    "http://8.su.bdimg.com":"https://ss3.bdstatic.com/iPoZeXSm1A5BphGlnYG"
  }';
  $domain = json_decode($baidu_domain, true);
  foreach($domain as $k=>$v){
    $str = str_replace($k, $v, $str);
  }
  return $str;
}
$wd = '仙剑奇侠传';
$url = 'http://www.baidu.com/s?wd='.urlencode($wd);
$data = array();
$header = array();
$response = doCurl($url, $data, $header, 5);
echo cdomain($response); // 调用域名转换
?>

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

PHP CURL采集百度搜寻结果图片不显示问题的解决方法

以上所述是小编给大家介绍的PHP CURL采集百度搜寻结果图片不显示问题的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP将两个关联数组合并函数提高函数效率
Mar 18 PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 PHP
php绘制一条直线的方法
Jan 24 PHP
php使用标签替换的方式生成静态页面
May 21 PHP
PHP之预定义接口详解
Jul 29 PHP
基于PHP生成简单的验证码
Jun 01 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
PHP中CheckBox多选框上传失败的代码写法
Feb 13 PHP
PHP获取路径和目录的方法总结【必看篇】
Mar 04 PHP
php验证码生成器
May 24 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 PHP
php使用curl代理实现抓取数据的方法
Feb 03 #PHP
php实现xml转换数组的方法示例
Feb 03 #PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 #PHP
php指定长度分割字符串str_split函数用法示例
Jan 30 #PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 #PHP
PHPExcel在linux环境下导出报500错误的解决方法
Jan 26 #PHP
超强多功能php绿色集成环境详解
Jan 25 #PHP
You might like
神族 PROTOSS 概述
2020/03/14 星际争霸
php 表单数据的获取代码
2009/03/10 PHP
php学习之 认清变量的作用范围
2010/01/26 PHP
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
js数组去重的方法总结
2019/01/18 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
详解Python文本操作相关模块
2017/06/22 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
毕业生自我推荐
2013/11/04 职场文书
策划助理岗位职责
2013/11/18 职场文书
建筑工地宣传标语
2014/06/18 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
感谢信
2019/04/11 职场文书
python 学习GCN图卷积神经网络
2022/05/11 Python
python内置模块之上下文管理contextlib
2022/06/14 Python