php登录抓取网页指定内容(外汇需求描述需要抓取某金融网站的期货数据(图))
优采云 发布时间: 2021-09-30 08:09php登录抓取网页指定内容(外汇需求描述需要抓取某金融网站的期货数据(图))
需求描述
需要抓取某金融网站的期货数据,打开浏览器的开发者模式,找到界面url,响应数据正是我们想要的,但是当我们在浏览器地址栏输入url时,我被重定向到网站的期货主页,没有检索到数据。
解决方案
找到请求的header,在我们的curl请求代码中添加header参数来模拟浏览器访问,如下图:
将此头信息添加到我们的代码中,如下所示:
抓取数据后,发现数据是乱码,如下图:
检查后,对返回的数据进行压缩,并添加curl参数:
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');//解析gzip,deflate内容
再次发出请求,成功返回数据:
下面附上程序的主要代码;
public function catchData(){
$url="https://cn.investing.com/common/modules/js_instrument_chart/api/data.php?pair_id=8830&pair_id_for_news=8830&chart_type=area&pair_interval=3600&candle_count=120&events=yes&volume_series=yes&period=";
$headers=[
'Accept:text/html,application/xhtml+xml,application/xml,application/json, text/javascript, */*; q=0.01',
'Accept-Encoding:gzip, deflate, br',
'Accept-Language:en-US,en;q=0.5',
'Cache-Control:max-age=0',
'Connection:keep-alive',
'Cookie:StickySession=id.22115874781.5…gat=1; _gat_allSitesTracker=1',
'Host:cn.investing.com',
'Referer:https://cn.investing.com/commodities/gold',
'User-Agent:Mozilla/5.0 (X11; Ubuntu; Linu…) Gecko/20100101 Firefox/65.0',
'X-Requested-With:XMLHttpRequest',
];
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);//指定头部参数
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//结果不输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');//这个是解析gzip,deflate压缩的内容
$data = curl_exec($ch);//运行curl
curl_close($ch);
print_r($data);
}
博主留言
我今天已经处理了这个问题 1.2 个小时。我觉得有必要记录一下。有同样问题的朋友可以参考。
你很少写博客。写得不好请轻描淡写。