根据特定条件刮取谷歌的所有搜索结果?

时间:2012-03-19 16:12:59

标签: c# web-crawler web-scraping

我正在使用我的mapper,我需要获取newegg.com的完整地图

我可以尝试直接废弃NE(哪种违反NE的政策),但他们有许多产品无法通过直接网元搜索获得,但只能通过google.com搜索;我也需要这些链接。

以下是返回16mil结果的搜索字符串: https://www.google.com/search?as_q=&as_epq=.com%2FProduct%2FProduct.aspx%3FItem%3D&as_oq=&as_eq=&as_nlo=&as_nhi=&lr=&cr=&as_qdr=all&as_sitesearch=newegg.com&as_occt=url&safe=off&tbs=&as_filetype=&as_rights=

我希望我的刮刀查看所有结果并将超链接记录到所有这些结果中。 我可以从谷歌搜索结果中删除所有链接,但谷歌每个查询限制100页 - 1,000个结果,谷歌再次对这种方法不满意。 :)

我是新手;你能告诉/指出我正确的方向吗?是否有任何工具/方法可以帮助我实现目标?

3 个答案:

答案 0 :(得分:2)

  

我是新手;你能告诉/指出我正确的方向吗?   有没有任何工具/方法可以帮助我实现我的目标   目标是什么?

Google会采取很多措施来阻止您抓取他们的网页,我不是在谈论仅仅是要求您遵守他们的robots.txt。我不同意他们的道德规范,也不同意他们的T& C,甚至他们推出的“简化”版本(但这是一个单独的问题)。

如果你想被人看到,那么你必须让谷歌抓取你的网页; 但是,如果你想抓取谷歌,那么你必须跳过一些重大的箍!也就是说,你必须获得一堆代理,这样你就可以通过速率限制和302s +验证码页面,当他们对你的“活动”产生怀疑时,他们会发布这些页面。

尽管对Google的T& C彻底恶化,但我不建议你违反它!但是,如果你绝对需要获取数据,那么你可以得到一个大list of proxies,将它们加载到队列中,并在每次要获取页面时从队列中提取代理。如果代理工作,则将其放回队列中;否则,丢弃代理。甚至可能为每个失败的代理提供一个计数器,如果超过一定数量的失败则丢弃它。

答案 1 :(得分:1)

我没试过,但您可以使用googles custom search API。当然,它开始每天100次搜索后花钱。我猜他们必须经营一家公司; p

答案 2 :(得分:0)

可能有点晚了,但我认为值得一提的是,你可以专业地抓取Google可靠而不会引起问题。

实际上,我所知道的并没有任何威胁要刮掉谷歌 如果你没有经验但是我不知道一个法律后果的案例,我很有挑战性,我总是关注这个话题。

也许几年前最大的抓取案件之一发生在微软刮掉谷歌为Bing提供动力的时候。谷歌能够通过放置现实世界中不存在的假结果来证明它,并且Bing突然接受了它们 谷歌命名并羞辱他们,这就是我记忆中发生的一切。

使用API​​很少是真正的用途,即使是少量的结果使用它也需要花费很多钱,而且免费金额相当小(禁令前每小时40次查询)。
另一个缺点是API不能反映真实的搜索结果,在您的情况下可能不是一个问题,但在大多数情况下,人们希望获得真正的排名位置。

现在,如果你不接受谷歌TOS或忽略它(当他们在你的创业公司中刮你时,他们并不关心你的服务条款)你可以走另一条路线。
模仿真实用户并直接从SERP获取数据。

这里的线索是每个IP地址每小时发送大约10个请求(可以增加到20个)(是的,您使用多个IP)。事实证明,这一数字在过去几年中对谷歌没有任何问题 使用缓存,数据库,ip轮换管理,以避免比需要更频繁地击中它 IP地址需要干净,不需要共享,如果可能的话,不得滥用历史记录 最初建议的代理列表会使主题复杂化,因为您会收到不稳定,不可靠的IP以及可疑的使用,共享和历史记录。

http://scraping.compunect.com上有一个开源的PHP项目,其中包含您需要启动的所有功能,我将它用于我的工作,现在可以运行几年没有麻烦。 这是一个完成的项目,主要用于作为项目的可定制基础,但也可以独立运行。

此外,PHP并不是一个糟糕的选择,我最初持怀疑态度,但我在运行PHP(5)作为后台进程两年没有一次中断。
对于这样的项目来说,表现很容易,所以我会试一试 否则,PHP代码就像C / JAVA ..你可以看到事情是如何完成的,并在你自己的项目中重复它们。

相关问题