前言
最近需要爬取一些 google 搜索结果,首先看的就是有没有相关的 API,官方有提供 API 查询,但爬取量有一定限制。
太长不看版
- 接口地址为
https://www.googleapis.com/customsearch/v1?key={YOUR_KEY}&q={SEARCH_WORDS}&cx={YOUR_CX}&start={10}&num={10}
- KEY 从 谷歌云 API 控制台 来的,需要有外币卡先注册谷歌云账号。但似乎付费的话就不用这个 KEY 了,仅用 CX 即可,这个待查。
- CX 从 谷歌可编程搜索 中来
- 一天只有 100 次的免费搜索限额,只能查询前 100 条。如需增加则 5 刀 1000 次,但一天上限 10000。 次,对于我来说已经足够用了
怎么做
首先来到 Google Developers 的相关文档页面,可以看到大概的介绍。
生成 API KEY
点击 overview 中的 Get a Key,此处需要登录谷歌帐号,以及注册谷歌云帐号(应该需要绑定外币信用卡)并且创建一个 project,此处略过不表,最后你会得到一个 Key。
这个 Key 可以从谷歌云控制台中看到,建议加上应用限制和 API 限制,以防泄露后被滥用。
生成 cx
cx 是 Google 可编程搜索引擎(Programmable Search Engine)的 id 标识,在此处 新增搜索引擎 可以获取。这里可以指定要搜索的网站,比如说我只希望通过该 API 搜索出来的网站是 shodan.io,谷歌语法里面相当于 site:shodan.io
,可以这么设置:
新增完成之后点击修改搜索引擎,并点击设置,你就可以看到你的搜索引擎 id,就是我们说的 cx
里面还有一些选项,自己可以看着修改~如果还想看看文档,可点击在页面下方一点的【以程序化方式访问】-【使用入门】
API
JSON API 可以从 文档 中查看
完整的可请求参数如下,基本上和高级搜索保持一致:
https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"
简化版:https://www.googleapis.com/customsearch/v1?key={YOUR_KEY}&q={SEARCH_WORDS}&cx={YOUR_CX}&start={10}&num={10}
存在的一些问题
搜索结果与 API 不一致
因为不同 IP 使用谷歌搜索会出现不一样的结果,比如美国和香港的 IP 访问必然会不一样。可以使用 API 中的 lr
参数修改语言选项,也可以在【修改搜索引擎】中修改语言和地区选项。
请求频率
由于一天查的上限就这么多,所以等待时间尽量拉长吧,我 5-10s 请求一次没啥问题
页数比第一页看到的结果数少
在第一页中,谷歌通常会显示比较多的结果,但是实际上很少有搜索结果能翻到100页的,甚至可能三四页就没了。这个是谷歌的策略吧,只会显示相关度比较高的页面……
参考资料
https://developers.google.com/custom-search/docs/tutorial/introduction
https://developers.google.com/custom-search/v1/reference/rest