我正在尝试启动网络抓取工具。以下是起始代码
<?php
$start = "https://www.yocale.com/Search?latitude=29.748093&longitude=-95.37127699999996";
function follow($url)
{
$content = file_get_contents($url);
$content = str_replace('src="/', 'src="https://www.yocale.com/', $content);
$content = str_replace('href="/', 'href="https://www.yocale.com/', $content);
$content = str_replace('src="https://www.yocale.com//maps.googleapis.com', 'src="//maps.googleapis.com', $content);
$content = str_replace("url: '/", "url: 'https://www.yocale.com/", $content);
$content = str_replace("= '/", "= 'https://www.yocale.com/", $content);
echo $content;
}
follow($start);
从给定的代码中,它将成功地在浏览器中呈现html并调用所需的文件,例如javascript。
部分javascript是使用此请求的ajax调用
https://www.yocale.com/Search?distance=25km&latitude=29.748093&longitude=-95.37127699999996&_=1525228859581
它不会获取任何数据,我知道它与CORS有关,而且它在日志中,
Failed to load https://www.yocale.com/Search?distance=25km&latitude=29.748093&longitude=-95.37127699999996&_=1525228859581: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://search.oo' is therefore not allowed access.
其他请求如字体
有没有办法抓取这个页面,使用php在浏览器中使用ajax或类似的方式呈现一些数据?
答案 0 :(得分:0)
使用以下
在第1行和第2行之间插入新行header('Access-Control-Allow-Origin: https://www.somewebsite.com', false);
这样的事情:
<?php
header('Access-Control-Allow-Origin: https://www.somewebsite.com', false);
start = "https://www........
标题修改/允许出现在html或php文件的最开头非常重要,因为如果它出现在任何HTML元素之后,此标题无法正确设置会话。