使用CURL和PHP通过代理获取谷歌搜索结果时遇到问题
在获取google.com时,此脚本可以正常工作,但在使用google.com/search?q=test时则不行。当我不使用CURLOPT_FOLLOWLOCATION时,我会移动302。当我使用它时,我会得到一个页面,要求我输入验证码。我尝试了几种不同的基于美国的代理,并改变了用户代理字符串。这里有我遗漏的东西吗使用CURL和PHP通过代理获取谷歌搜索结果时遇到问题,curl,proxy,screen-scraping,Curl,Proxy,Screen Scraping,在获取google.com时,此脚本可以正常工作,但在使用google.com/search?q=test时则不行。当我不使用CURLOPT_FOLLOWLOCATION时,我会移动302。当我使用它时,我会得到一个页面,要求我输入验证码。我尝试了几种不同的基于美国的代理,并改变了用户代理字符串。这里有我遗漏的东西吗 function my_fetch($url,$proxy,$user_agent='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
function my_fetch($url,$proxy,$user_agent='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8')
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_PROXY, $proxy);
curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_REFERER, 'http://www.google.com/');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt ($ch, CURLOPT_TIMEOUT, 20);
$result = curl_exec ($ch);
curl_close ($ch);
return $result;
}
$url = 'http://www.google.com/search?q=test';
$proxy = '152.26.53.4:80';
echo my_fetch($url,$proxy);
请不要回复使用API的建议。API不足以满足我的需要。谷歌不再支持cURL。 谷歌不再通过Curl提供访问权限,它可能会给你302条移动消息,如果你想使用它,你必须使用API
谢谢您可以尝试使用PhantomJS实现这一点:
var page = require("webpage").create();
var homePage = "http://www.google.com/";
page.open(homePage);
page.onLoadFinished = function(status) {
var url = page.url;
console.log("Status: " + status);
console.log("Loaded: " + url);
page.includeJs("http://code.jquery.com/jquery-1.8.3.min.js", function() {
console.log("Loaded jQuery!");
page.evaluate(function() {
var searchBox = $(".lst");
var searchForm = $("form");
searchBox.val("your query");
searchForm.submit();
});
});
window.setTimeout(
function () {
page.render( 'google.png' );
phantom.exit(0);
},
1000 // wait 5,000ms (5s)
);
};
谢谢罗杰。我不知道可以限制Curl访问。有没有其他不必使用API就可以访问Google的方法?