使用PHP Curl抓取谷歌搜索结果,工作但似乎已经停止

时间:2014-08-20 16:41:01

标签: php curl google-search

嗨我试图抓取谷歌搜索结果,只是为了我自己的学习,但也看到我可以加快访问直接URLS(我知道他们的API,但我只是想我现在试试这个)。

它工作正常,但它似乎停止了,它现在什么都没有返回,我不确定它是否我做了什么,但我可以说我在for循环中有这个允许start参数增加,我想知道可能会导致问题。

谷歌有可能阻止IP抓取吗?

谢谢..

$url = "https://www.google.ie/search?q=adrian+de+cleir&start=1&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:official&client=firefox-a&channel=fflb&gws_rd=cr&ei=D730U7KgGfDT7AbNpoBY#channel=fflb&q=adrian+de+cleir&rls=org.mozilla:en-US:official";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);

# Create a DOM parser object
$dom = new DOMDocument();

# Parse the HTML from Google.
# The @ before the method call suppresses any warnings that
# loadHTML might throw because of invalid HTML in the page.
@$dom->loadHTML($html);

# Iterate over all the <a> tags
foreach($dom->getElementsByTagName('h3') as $link) {

        $actual_link = $link->getElementsbyTagName('a');
        foreach ($actual_link as $single_link) {
        # Show the <a href>
        echo '<pre>';
        print_r($single_link->getAttribute('href'));
        echo '</pre>';      


}
}

2 个答案:

答案 0 :(得分:1)

以下是我用python编写的程序。但它没有完全完成。现在它只获取第一页并打印结果上找到的所有href链接。

我们可以使用集合并从结果集中删除冗余链接。

import requests<br>
from bs4 import BeautifulSoup


def search_spider(max_pages, search_string):    
    page = 0   
    search_string = search_string.replace(' ','+')   
    while page <= max_pages:  
    url = 'https://www.google.com/search?num=10000&q=' + search_string + '#q=' + search_string + '&start=' + str(page)   
    print("URL to search - " + url)   
    source_code = requests.get(url)   
    count = 1   
    plain_text = source_code.text   
    soup = BeautifulSoup(plain_text)   
    for link in soup.findAll("a", {"class" : ""}):   
        href = link.get('href')   
        input_string = slice_string(href)   
        print(input_string)   
        count += 1   
    page += 10    


def slice_string(input_string):   
    input_string = input_string.lstrip("/url?q=")   
    index_c = input_string.find('&')   
    input_string = input_string[:index_c]   
    return input_string   

search_spider(1,"bangalore cabs")   

该程序将搜索谷歌中的班加罗尔出租车。

谢谢,
卡兰

答案 1 :(得分:0)

您可以通过以下简单的curl脚本命令检查Google是否阻止了您:

curl -sSLA Mozilla "http://www.google.com/search?q=linux" | html2text -width 80

您可以安装html2text以将html转换为纯文本。

通常情况下,您应该使用Google提供的Custom Search API来避免任何限制,这样您就可以通过访问不同的格式(例如XML或JSON)来更轻松地检索搜索结果。