获取Google搜索结果的Py脚本

零、前言

之前写过获取baidu搜索结果的Py脚本,但是越来越觉得baidu在搜索上跟google还是有很大差距的,尤其是google支持很多搜索语法,非常强大。所以这里这里写了个简单的获取google搜索结果的脚本。但是google做了防爬取限制,使用一般的正则匹配是不行的,这里用的是google的ajax的接口,但是使用起来还是有些问题,没有完全解决。

一、修改hosts文件上google

Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析,如果发现是被屏蔽的IP或域名,就会禁止打开此网页!

也就是说通过hosts文件可以自定义google的代理ip,这样就能上google,这里有个hosts文件定期更新的网站

http://blog.my-eclipse.cn/host-google.html

按照上面的教程更改即可

二、获取google搜索结果的Python代码

#! /usr/bin/env python
#coding=utf-8
import urllib2,urllib
import msvcrt
import simplejson
import sys

def CatchURL(key,num):#抓取链接
    url = ('https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=%s&rsz=8&start=%s') % (key,num)
    try:
        request = urllib2.Request(url)
        response = urllib2.urlopen(request)
        results = simplejson.load(response)
        URLinfo = results['responseData']['results']
    except Exception,e:
        print e
    else:
        for info in URLinfo:
            result.append(info['url'])

def RemoveRepeat(List):#列表去重
    New_List = []
    for i in List:
        if i not in New_List:
            New_List.append(i)
    return New_List

def save(List):
    f = open("result","w")
    for i in List:
        f.write(i+"\n")
    f.close()

if __name__ == '__main__':
    searchstr = raw_input()
    pagenum = input()
    result = []
    for i in range(1,pagenum+1):
        CatchURL(searchstr,i)
    result = RemoveRepeat(result)
    save(result)
    print "DONE!"

运行程序,第一行输入搜索的内容,第二行输入搜索的页数,然后会在程序同目录下生成result文件,里面是获取并且去重后的url,但是程序运行的时候可能会出现如下的情况

那是因为google检测到非正常的请求,导致无法获取搜索结果,暂时未能解决。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注