rifki192/google-url

操作谷歌搜索和SERP

v1.1.0 2015-12-30 06:14 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:04:59 UTC


README

该项目已被弃用,以支持更好的替代方案: http://serp-spider.github.io

这意味着项目支持将停止

Google URL:PHP的谷歌爬虫

准备以专业的方式查询谷歌并使用PHP进行出色的谷歌搜索

功能

  • 谷歌SERP URL生成
  • 谷歌抓取包括
    • 自然结果解析
    • Adwords结果解析

请在使用前阅读以下所有部分,它包含有关使用的重要信息。

注意...

...抓取谷歌是被禁止的(对于编写得最好的爬虫来说,真是个讽刺)...但谁在乎呢?

谷歌在乎。如果你在短时间内提交太多请求,它将通过验证码阻止你。

通常我每次查询延迟30秒。但如果你做了很多请求,这仍然太短了。

如何应对

  • 优化每次查询之间的延迟。
  • 如果你想在短时间内做大量请求,你将不得不使用代理。该库中包含一个工具可以帮助你完成这项工作(见下文),但你也可以自己完成。

安装

该库在packgist上可用:"sneakybobito/google-url": "dev-master"

如果你不太熟悉packagist,你还可以使用repo中的加载器。为此,请下载库(例如,从github作为zip文件)并仅包含名为``autoload.php̀的文件。

    <?php
       
    include("path/to/googleurl/autoload.php");

    $g = new \GoogleUrl();

    // ......

使用示例

当你使用这个库时,你必须记住查询谷歌是你必须控制的事情。

你不能每次在您的web服务器上加载页面时都使用它。实际上,这可能意味着加载网页的时间很长。你还必须控制你在一段时间内进行的查询数量。否则,谷歌会认为你是一个机器人,并通过验证码阻止你。

相反,你可以在一个将结果存储在数据库中的cli程序中使用它。然后从网页脚本中查询数据库。

再次强调,在每次查询之间使用延迟非常重要,这可以防止谷歌将您的服务器添加到黑名单。没有适用于延迟的通用规则。很难确定要使用的最佳延迟,并且需要进行很多测试。这就是为什么人们想要将其保密。

    <?php
        $googleUrl=new \GoogleUrl();
        $googleUrl->setLang('en') // lang allows to adapt the query (tld, and google local params)
            ->setNumberResults(10);                        // 10 results per page
        $acdcPage1=$googleUrl->setPage(0)->search("acdc"); // acdc results page 1 (results 1-10)
        $acdcPage2=$googleUrl->setPage(1)->search("acdc"); // acdc results page 2 (results 11-20)

        $googleUrl->setNumberResults(20);
        $simpsonPage1=$googleUrl->setPage(0)->search("simpson"); // simpsons results page 1 (results 1-20)




        // GET NATURAL RESULTS

        $positions=$simpsonPage1->getPositions();

        echo "results for " . $simpsonPage1->getKeywords();
        echo "<ul>";
        foreach($positions as $result){
            echo "<li>";
            echo "<ul>";
            echo "<li>position : " . $result->getPosition() . "</li>";
            echo "<li>title : "    . utf8_decode($result->getTitle())    . "</li>";
            echo "<li>website : "  . $result->getWebsite()  . "</li>";
            echo "<li>URL : <a href='" . $result->getUrl() ."'>" . $result->getUrl() . "</a></li>";
            echo "</ul>";
            echo "</li>";
        }
        echo "</ul>";

        // GET ADWORDS RESULTS

        $commercialSearch = $googleUrl->setLang("fr")->setPage(0)->search("simpson tshirt");
        $adwordsPositions = $commercialSearch->getAdwords();
        echo "adwords for " . $commercialSearch->getKeywords();
        echo "<ul>";
        foreach($adwordsPositions as $result){
            echo "<li>";
            echo "<ul>";
            echo "<li>location : " . $result->getLocation() . "</li>"; // adwords can be displayed in body or in column
            echo "<li>position : " . $result->getPosition() . "</li>";
            echo "<li>title : "    . utf8_decode($result->getTitle())    . "</li>";
            echo "<li>fake url : "  . $result->getVisurl()  . "</li>";
            echo "<li>URL :" . $result->getAdwordsUrl() . "</li>";
            echo "<li>Text : " . $result->getText() . "<li>";
            echo "</ul>";
            echo "</li>";
        }
        echo "</ul>";

        // we can also get only results in body
        echo "adwords <b>IN BODY</b> for " . $commercialSearch->getKeywords();
        echo "<ul>";
        foreach($adwordsPositions->getBodyResults() as $result){
            echo "<li>" . $result->getPosition() . " : " . utf8_decode($result->getTitle()) . "</li>";
        }
        echo "</ul>";


        // and obviously results in the right column
        echo "adwords <b>IN COLUMN</b> for " . $commercialSearch->getKeywords();
        echo "<ul>";
        foreach($adwordsPositions->getColumnResults() as $result){
            echo "<li>" . $result->getPosition() . " : " . utf8_decode($result->getTitle()) . "</li>";
        }
        echo "</ul>";
        
    }

使用代理

重要警告

该库提供的代理池目前已被弃用,因为它将在下一个版本中删除。代理管理非常具体,无法在库中以合理的方式实现。该库将继续支持通过代理进行查询,但代理管理将由你自己管理。

<?php

include __DIR__ . "/../autoload.php";



$proxy1 = new \GoogleUrl\SimpleProxy("localhost", "3128");
$proxy2 = new \GoogleUrl\SimpleProxy("someproxyAddress", "8080");
$proxy2->setLogin("mylogin");
$proxy2->setPassword("myPassword");


// OR WITH PROXY STRING :

$proxy2 = new \GoogleUrl\ProxyString("mylogin:myPassword@someproxyAddress:8080");


$googleUrl=new \GoogleUrl();
$googleUrl->setLang('fr')->setNumberResults(10)->search("simpson",$proxy1);
$googleUrl->setLang('fr')->setNumberResults(10)->search("simpsons",$proxy2);

请参阅 https://github.com/SneakyBobito/google-url/blob/master/doc/proxy_rotation.md 以获取有关代理的更完整使用方法。

实现的语言

每种语言都匹配一个谷歌域名(google.com、google.fr、google.de...)和搜索语言。对于EN或DE,您将不会得到相同的结果。

已实现以下语言。

  • en(英语)
  • fr(法语)
  • de(德语)
  • nl(荷兰语)
  • cs(捷克语)
  • dk(丹麦语)
  • jp(日语)
  • es(西班牙语)
  • ru(俄语)

随着时间的推移,将会出现更多功能,但由于语言管理即将改变,我们目前不想实施太多(不必担心使用它们,这只是内部变动)。

支持 - 联系

欢迎为任何请求/问题提交问题

路线图

  • 页面解析改进(图片结果、网站结果...)
  • 重构并移动代理池
  • 重构语言管理
  • 重构页面解析管理以更好地处理谷歌页面变化