干货教程: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采集百度搜索结果图片不显示问题的解决方法。我希望它对你有帮助。有任何问题请给我留言,小编会及时回复。我们的。还要感谢大家对脚本之家网站的支持!