Php 查询谷歌搜索引擎?

Php 查询谷歌搜索引擎?,php,jquery,google-chrome,Php,Jquery,Google Chrome,我试图查询谷歌搜索引擎的日期,以获得第一页的结果,然后处理它。我当前使用的查询返回结果,但不在我设置的日期范围内;如果我将同一个查询复制到google中,它会对日期起作用,但不会从我的PHP脚本中起作用。脚本仅返回当前或正常结果,就好像没有设置日期参数一样。下面是使用的部分代码片段。下面是我所指的查询以及$url变量中发布的代码片段 查询:https://www.google.com/search?q=“.$Query.&source=lnt&tbs=cdr%3A1%2.$startDate.$

我试图查询谷歌搜索引擎的日期,以获得第一页的结果,然后处理它。我当前使用的查询返回结果,但不在我设置的日期范围内;如果我将同一个查询复制到google中,它会对日期起作用,但不会从我的PHP脚本中起作用。脚本仅返回当前或正常结果,就好像没有设置日期参数一样。下面是使用的部分代码片段。下面是我所指的查询以及$url变量中发布的代码片段

查询:
https://www.google.com/search?q=“.$Query.&source=lnt&tbs=cdr%3A1%2.$startDate.$EndDate.&tbm=

$Query= $_POST['Query'];
$Query=str_replace(" ","+",$Query);
if ($_POST['Start_date']==''){
$startday='1';
$startmonth='11';
$startyear='2011';
}
if ($_POST['End_date']==''){
$endday='1';
$endmonth='11';
$endyear='2013';
}
$startDate='Ccd_min%3A'.$startmonth.'%2F'.$startday.'%2F'.$startyear.'.%2';
$EndDate='Ccd_max%3A'.$endmonth.'%2F'.$endday.'%2F'.$endyear.'';

if ($_POST['Query']!=''){
$url  = 'https://www.google.com/search?   
q='.$Query.'&source=lnt&tbs=cdr%3A1%2'.$startDate.$EndDate.'&tbm=';
echo $url .'<p>';
$html = file_get_html($url);
$searchresults=array();
$linkObjs = $html->find('h3.r a');
foreach ($linkObjs as $linkObj) {
$link   = trim($linkObj->href);

    // if it is not a direct link but url reference found inside it, then extract
    if (!preg_match('/^https?/', $link) && preg_match('/q=(.+)&amp;sa=/U', $link, $matches) && preg_match('/^https?/', $matches[1])) {
        $link = $matches[1];
    } else if (!preg_match('/^https?/', $link)) { // skip if it is not a valid link
        continue;
    }
    array_push($searchresults,$link);
}
$Query=$\u POST['Query'];
$Query=str_replace(“,“+”,$Query);
如果($\u POST['Start\u date']=''){
$startday='1';
$startmonth='11';
$startyear='2011';
}
如果($_POST['End\u date']=''){
$endday='1';
$endmonth='11';
$endyear='2013';
}
$startDate='Ccd_min%3A'.$startmonth'.%2F'.$startday'.%2F'.$startyear'..2';
$EndDate='Ccd_max%3A'.$endmonth'.%2F'.$endday'.%2F'.$endyear';
如果($_POST['Query']!=''){
$url='1https://www.google.com/search?   
q='.$Query.&source=lnt&tbs=cdr%3A1%2'.$startDate.$EndDate.&tbm=';
回显$url。“”;
$html=file\u get\u html($url);
$searchresults=array();
$linkObjs=$html->find('h3.ra');
foreach($linkObjs作为$linkObj){
$link=trim($linkObj->href);
//如果它不是直接链接,而是在其中找到的url引用,则提取
如果(!preg_-match('/^https?/',$link)&&preg_-match('/q=(.+)&sa=/U',$link,$matches)&&preg_-match('/^https?/',$matches[1]){
$link=$matches[1];
}如果(!preg_match('/^https?/',$link)){//如果不是有效链接,则跳过
继续;
}
数组推送($searchresults,$link);
}

谷歌为未启用
JavaScript
的设备提供了不同的html结构(
file\u get\u html($url)
)。暂时在chrome上查看页面。这样你就可以确保在脚本中使用正确的
div id
类等


根据您的评论更新: 如果禁用JavaScript,Google不允许通过直接url按日期范围进行搜索。 尽管如此,您仍然可以使用
daterange
Google操作符在指定的日期范围内查找由Googlebot编制索引的页面。提交的日期必须采用
Julian date
格式,并且应省略分数以使该操作符正常工作

Example: daterange:2452671-2452671 lisbon
daterange
运算符至少需要一个合适的搜索词,并且可以与其他运算符组合使用


gregoriantojd()
要将
Gregorian日期
转换为
Julian日期
,您可以使用php函数
gregoriantojd(int$month,int$day,int$year)
,即:

$startDate = gregoriantojd(12, 28, 2011);
//2455924

$endDate = gregoriantojd(12, 28, 2014);
//2457020
您的搜索
$url
应如下所示:

$url = "https://www.google.pt/search?q=lisbon+daterange:2455924-2457020&btnG=Search&num=100&gbv=1"

最终代码:
include_once(“simple_html_dom.php”);
$startDate=gregoriantojd(12,28,2011);//2455924
$endDate=gregoriantojd(2014年12月28日);//2457020
$nResults=“100”;
$Query=“里斯本”;
$url=”https://www.google.com/search?q=$Query+daterange:$startDate-$endDate&btnG=Search&num=$nResults&gbv=1”;
回显$url。“”;
$html=file\u get\u html($url);
$searchresults=array();
$linkObjs=$html->find('h3.ra');
foreach($linkObjs作为$linkObj){
$link=trim($linkObj->href);
//如果它不是直接链接,而是在其中找到的url引用,则提取
如果(!preg_-match('/^https?/',$link)&&preg_-match('/q=(.+)&sa=/U',$link,$matches)&&preg_-match('/^https?/',$matches[1]){
$link=$matches[1];
}如果(!preg_match('/^https?/',$link)){//如果不是有效链接,则跳过
继续;
}
数组推送($searchresults,$link);
}
打印(搜索结果);
/*
数组([0]=>http://www.cnn.com/2014/01/25/travel/lisbon-coolest-city/ [1] => http://www.tripadvisor.com/Tourism-g189158-Lisbon_Lisbon_District_Central_Portugal-Vacations.html
等
*/

您发布的代码中有换行符内部url:

$url  = 'https://www.google.com/search?
q='.$Query.'&source=lnt&tbs=cdr%3A1%2'.$startDate.$EndDate.'&tbm=';
通常表示为
LF
字符(
0x0D
,在类unix系统上)或
CR
+
LF
字符(
0x0D
+
0x0A
,windows)

因此,如果仔细查看请求的url,脚本将发送一个requst,其中GET参数名为
%0D%0Aq
,而不是
q

为了纠正这一点,您应该将整个两行放在一行上,或者将换行符放在字符串文字的外部,在您的情况下,这些文字是每对单独的QOUTE之间的字符串,例如(第二行开头的点更容易避免忽略两行的重叠):


这就是它复制和粘贴的方式,因为字符串中没有空格。当我在谷歌中复制和粘贴回显URL时,它可以工作,但在脚本执行中不起作用。感谢我紧急处理的回复,这就是我无法响应的原因。当我禁用javascript时,你是对的。查询不再使用我指定的日期范围,它只是t返回正常结果。你能建议一个可能适用于日期范围的查询吗?Google datarange:operator accept Julian years,即:
daterange:2451607-2451610
,你能发布一个你使用的查询示例吗?查询:@user3002303我到家后会看一看。效果非常好!我唯一的问题是如何增加如果搜索结果超过10个,我将不得不问另一个问题,我相信。
$url  = 'https://www.google.com/search?
q='.$Query.'&source=lnt&tbs=cdr%3A1%2'.$startDate.$EndDate.'&tbm=';
$url  = 'https://www.google.com/search?q=' 
  . $Query . '&source=lnt&tbs=cdr%3A1%2' . $startDate . $EndDate . '&tbm=';