rifki192 / google-url
操作谷歌搜索和SERP
Requires
- php: >=5.3
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(俄语)
随着时间的推移,将会出现更多功能,但由于语言管理即将改变,我们目前不想实施太多(不必担心使用它们,这只是内部变动)。
支持 - 联系
欢迎为任何请求/问题提交问题
路线图
- 页面解析改进(图片结果、网站结果...)
- 重构并移动代理池
- 重构语言管理
- 重构页面解析管理以更好地处理谷歌页面变化