文档章节

python模块介绍- google 谷歌搜索引擎python接口

磁针石
 磁针石
发布于 2015/06/10 09:31
字数 1773
阅读 631
收藏 5
点赞 0
评论 0

简介

google 模块是谷歌搜索引擎python接口,系用urllib2在google上进行搜索,使用BeautifulSoup进行解释外部封装,非google官方接口。

  • 功能:谷歌搜索引擎python接口

  • 类型:外部模块

  • 当前版本:1.0.5(查看日期2013-12-22)

  • 下载地址: https://pypi.python.org/pypi/google

  • 月下载量:1万左右

  • 平台:跨平台

安装

https://pypi.python.org/pypi/setuptools下载最新版本的setuptools。google模块依赖setuptools2.0。setuptools是安装其他模块的基础,建议通过手动安装保持最新版本。

安装方法:

# tar xzvf setuptools-2.0.tar.gz
# cd setuptools-2.0
# python setup.py install
# easy_install pip
# pip install BeautifulSoup
# pip install google

使用

>>> from google import search
>>> for url in search('python', tld='com.hk',, stop=2):
...     print(url)
... 
http://www.python.org/
http://www.python.org/getit/
http://www.python.org/doc/
http://www.python.org/getit/releases/3.3.2/
http://www.python.org/getit/releases/2.7.5/
http://zh.wikipedia.org/zh-hk/Python
http://zh.wikipedia.org/wiki/PyPy
http://zh.wikipedia.org/wiki/%E5%8D%B3%E6%99%82%E7%B7%A8%E8%AD%AF
http://zh.wikipedia.org/wiki/%E5%90%89%E5%A4%9A%C2%B7%E8%8C%83%E7%BD%97%E8%8B%8F%E5%A7%86
http://zh.wikipedia.org/wiki/CPython
http://en.wikipedia.org/wiki/Python_(programming_language)
http://python.org.tw/
http://en.wikipedia.org/wiki/Burmese_python
http://en.wikipedia.org/wiki/Python_regius
http://news.nationalgeographic.com/news/2005/10/1006_051006_pythoneatsgator.html
http://www.animalpeoplenews.org/anp/2013/10/26/alligators-pigs-pythons-the-reptilian-ploy-to-resuscitate-sport-hunting/
http://kidfocused.com/mom-wakes-to-python-wrapped-around-toddler/
http://www.codecademy.com/tracks/python
http://openhome.cc/Gossip/Python/
http://pythonline.com/
http://learnpythonthehardway.org/book/
http://www.learnpython.org/

search(query, tld='com',, num=10, start=0, stop=None, pause=2.0): 使用谷歌搜索字符串query。返回结果为生成器。参数如下:

  • query (str) - 查询字符串。非URL编码格式。

  • tld (str) - 顶级域名Top level domain。比如com, com.hk。

  • lang (str)  - 语言。

  • num(int)  - 每页的结果数。

  • start(int) – 记录开始点。

  • stop(int) – 记录结束点。

  • pause(int)  - HTTP请求之间的sleep秒数。

get_page(url):使用cookiejar返回页面。相关变量如下:

源码

Google是一个相当小巧强悍的模块,代码只有200多行,是大家学习urlib2,BeautifulSoup的绝好资源,对如何发布python包也相当有借鉴意义。今后在urlib2等模块会深入Google模块,下面附上源码:

#!/usr/bin/env python# Python bindings to the Google search engine# Copyright (c) 2009-2013, Mario Vilas# All rights reserved.## Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions are met:##     * Redistributions of source code must retain the above copyright notice,#       this list of conditions and the following disclaimer.#     * Redistributions in binary form must reproduce the above copyright#       notice,this list of conditions and the following disclaimer in the#       documentation and/or other materials provided with the distribution.#     * Neither the name of the copyright holder nor the names of its#       contributors may be used to endorse or promote products derived from#       this software without specific prior written permission.## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE# POSSIBILITY OF SUCH DAMAGE.__all__ = ['search']import osimport sysimport timeif sys.version_info[0] > 2:
    from http.cookiejar import LWPCookieJar    from urllib.request import Request, urlopen    from urllib.parse import quote_plus, urlparse, parse_qselse:
    from cookielib import LWPCookieJar    from urllib import quote_plus    from urllib2 import Request, urlopen    from urlparse import urlparse, parse_qs# Lazy import of BeautifulSoup.BeautifulSoup = None# URL templates to make Google searches.url_home          = "http://www.google.%(tld)s/"url_search        = "http://www.google.%(tld)s/search?hl=%(lang)s&q=%(query)s&btnG=Google+Search"url_next_page     = "http://www.google.%(tld)s/search?hl=%(lang)s&q=%(query)s&start=%(start)d"url_search_num    = "http://www.google.%(tld)s/search?hl=%(lang)s&q=%(query)s&num=%(num)d&btnG=Google+Search"url_next_page_num = "http://www.google.%(tld)s/search?hl=%(lang)s&q=%(query)s&num=%(num)d&start=%(start)d"# Cookie jar. Stored at the user's home folder.home_folder = os.getenv('HOME')if not home_folder:
    home_folder = os.getenv('USERHOME')
    if not home_folder:
        home_folder = '.'   # Use the current folder on error.cookie_jar = LWPCookieJar(os.path.join(home_folder, '.google-cookie'))try:
    cookie_jar.load()except Exception:
    pass# Request the given URL and return the response page, using the cookie jar.def get_page(url):
    """
    Request the given URL and return the response page, using the cookie jar.

    @type  url: str
    @param url: URL to retrieve.

    @rtype:  str
    @return: Web page retrieved for the given URL.

    @raise IOError: An exception is raised on error.
    @raise urllib2.URLError: An exception is raised on error.
    @raise urllib2.HTTPError: An exception is raised on error.
    """
    request = Request(url)
    request.add_header('User-Agent',
                       'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)')
    cookie_jar.add_cookie_header(request)
    response = urlopen(request)
    cookie_jar.extract_cookies(response, request)
    html = response.read()
    response.close()
    cookie_jar.save()
    return html# Filter links found in the Google result pages HTML code.# Returns None if the link doesn't yield a valid result.def filter_result(link):
    try:

        # Valid results are absolute URLs not pointing to a Google domain
        # like images.google.com or googleusercontent.com
        o = urlparse(link, 'http')
        if o.netloc and 'google' not in o.netloc:
            return link        # Decode hidden URLs.
        if link.startswith('/url?'):
            link = parse_qs(o.query)['q'][0]

            # Valid results are absolute URLs not pointing to a Google domain
            # like images.google.com or googleusercontent.com
            o = urlparse(link, 'http')
            if o.netloc and 'google' not in o.netloc:
                return link    # Otherwise, or on error, return None.
    except Exception:
        pass
    return None# Returns a generator that yields URLs.def search(query, tld='com', lang='en', num=10, start=0, stop=None, pause=2.0):
    """
    Search the given query string using Google.

    @type  query: str
    @param query: Query string. Must NOT be url-encoded.

    @type  tld: str
    @param tld: Top level domain.

    @type  lang: str
    @param lang: Languaje.

    @type  num: int
    @param num: Number of results per page.

    @type  start: int
    @param start: First result to retrieve.

    @type  stop: int
    @param stop: Last result to retrieve.
        Use C{None} to keep searching forever.

    @type  pause: float
    @param pause: Lapse to wait between HTTP requests.
        A lapse too long will make the search slow, but a lapse too short may
        cause Google to block your IP. Your mileage may vary!

    @rtype:  generator
    @return: Generator (iterator) that yields found URLs. If the C{stop}
        parameter is C{None} the iterator will loop forever.
    """

    # Lazy import of BeautifulSoup.
    # Try to use BeautifulSoup 4 if available, fall back to 3 otherwise.
    global BeautifulSoup    if BeautifulSoup is None:
        try:
            from bs4 import BeautifulSoup        except ImportError:
            from BeautifulSoup import BeautifulSoup    # Set of hashes for the results found.
    # This is used to avoid repeated results.
    hashes = set()

    # Prepare the search string.
    query = quote_plus(query)

    # Grab the cookie from the home page.
    get_page(url_home % vars())

    # Prepare the URL of the first request.
    if start:
        if num == 10:
            url = url_next_page % vars()
        else:
            url = url_next_page_num % vars()
    else:
        if num == 10:
            url = url_search % vars()
        else:
            url = url_search_num % vars()

    # Loop until we reach the maximum result, if any (otherwise, loop forever).
    while not stop or start < stop:

        # Sleep between requests.
        time.sleep(pause)

        # Request the Google Search results page.
        html = get_page(url)

        # Parse the response and process every anchored URL.
        soup = BeautifulSoup(html)
        anchors = soup.find(id='search').findAll('a')
        for a in anchors:

            # Get the URL from the anchor tag.
            try:
                link = a['href']
            except KeyError:
                continue

            # Filter invalid links and links pointing to Google itself.
            link = filter_result(link)
            if not link:
                continue

            # Discard repeated results.
            h = hash(link)
            if h in hashes:
                continue
            hashes.add(h)

            # Yield the result.
            yield link        # End if there are no more results.
        if not soup.find(id='nav'):
            break

        # Prepare the URL for the next request.
        start += num        if num == 10:
            url = url_next_page % vars()
        else:
            url = url_next_page_num % vars()# When run as a script...if __name__ == "__main__":

    from optparse import OptionParser, IndentedHelpFormatter    class BannerHelpFormatter(IndentedHelpFormatter):
        "Just a small tweak to optparse to be able to print a banner."
        def __init__(self, banner, *argv, **argd):
            self.banner = banner
            IndentedHelpFormatter.__init__(self, *argv, **argd)
        def format_usage(self, usage):
            msg = IndentedHelpFormatter.format_usage(self, usage)
            return '%s\n%s' % (self.banner, msg)

    # Parse the command line arguments.
    formatter = BannerHelpFormatter(
        "Python script to use the Google search engine\n"
        "By Mario Vilas (mvilas at gmail dot com)\n"
        "https://github.com/MarioVilas/google\n"
    )
    parser = OptionParser(formatter=formatter)
    parser.set_usage("%prog [options] query")
    parser.add_option("--tld", metavar="TLD", type="string", default="com",
                      help="top level domain to use [default: com]")
    parser.add_option("--lang", metavar="LANGUAGE", type="string", default="en",
                      help="produce results in the given language [default: en]")
    parser.add_option("--num", metavar="NUMBER", type="int", default=10,
                      help="number of results per page [default: 10]")
    parser.add_option("--start", metavar="NUMBER", type="int", default=0,
                      help="first result to retrieve [default: 0]")
    parser.add_option("--stop", metavar="NUMBER", type="int", default=0,
                      help="last result to retrieve [default: unlimited]")
    parser.add_option("--pause", metavar="SECONDS", type="float", default=2.0,
                      help="pause between HTTP requests [default: 2.0]")
    (options, args) = parser.parse_args()
    query = ' '.join(args)
    if not query:
        parser.print_help()
        sys.exit(2)
    params = [(k,v) for (k,v) in options.__dict__.items() if not k.startswith('_')]
    params = dict(params)

    # Run the query.
    for url in search(query, **params):
        print(url)


参考资料


© 著作权归作者所有

共有 人打赏支持
磁针石
粉丝 175
博文 75
码字总数 300585
作品 0
邵阳
QA/测试工程师
基于Visual C++2010 混合Python编程以及Python简介

我们重点讲解如何在基于Visual C++2010 开发Python的调用,先介绍下Python, Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。它的名字来源于一个喜剧,也许最初设计Pyt...

junwong
2012/03/09
0
0
Mysql-Python 在 Mac osx下的安装

环境配置这个东西很讨厌,但是还必须得配,没办法。这个环境的配置过程也是很多坑,花了一个下午踩坑,由于重启了几次,所以没有截图来记录了。不过还是可以分享一下遇到问题每一步的分析和解...

doctordc
05/14
0
0
1.2.3 Python简介和优势

Python 由 Guido 于1989年年底开发,Python 语言是基于ABC教学语言的。ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是,ABC语言并没有获得广泛的应用,Guido认为是非开放造成...

Gooiem
2015/08/15
0
0
10个Python 统计报表/图表图形类库

今天介绍一些Python中用于画图表图形的类库。因为有些时候,他们跟matlab一样简单,方便。而且有些也具有非凡的表现力。 matplotlib,官网:http://matplotlib.sourceforge.net/,Matplotlib ...

大数据之路
2012/08/24
0
0
Python数据科学(八)- 资料探索与资料视觉化

传送门: Python数据科学(一)- python与数据科学应用(Ⅰ) Python数据科学(二)- python与数据科学应用(Ⅱ) Python数据科学(三)- python与数据科学应用(Ⅲ) Python数据科学(四)- 数据收...

_知几
05/22
0
0
Python对象持久化学习整理

随着项目的深入,python对象持久化问题也随之而来。而在这之前,对于python对象持久化还停留在pickle时代,而这已无法满足当前项目发展的需要了,于是只好借助google疯狂的学习了一把,同时也...

索隆
2012/05/24
0
0
在C++软件中嵌入python解释器

Python简介 Python是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能够简单而有效地实现面向对象编程,特别适用于快速应用程序开发,也可以用来开发...

openthings
2015/01/21
0
0
这一本书教你用Python快速入门深度神经网络

2016年年初,传奇的围棋棋手李世石与一个围棋界的“新手”开始了一系列举世瞩目的较量。 围棋是一种棋盘类游戏,于2500年前发源于中国。它是一种比国际象棋更为复杂的策略游戏,全球有75个国...

异步社区
06/11
0
0
Whoosh 原理与实战1--Python 搜索框架 Whoosh 简介

Whoosh 是一个纯 Python 编写的搜索框架,类似于Lucene。比较简单,可以快速构建站内搜索。也可以在此基础上构建搜索引擎,但需要自己扩展 爬虫Spider 和 中文分词组件。 Whoosh详细可以查看...

从前
2012/11/12
0
2
大神整理的python资源大全

Python基本安装: http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站; http://www.activestate.com/ 集成多个有用插件的强大非官方版本,特别是针对Windo...

openthings
2015/12/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

全新内存布局Android5 for one x

众所周知Android5.0默认ART模式,运行速度加倍,软件占用内存也加倍,我们one x这种元老机采用旧的内存布局,data空间2g ART模式下安装几个软件也就不够用了。最近逛国外的xda论坛,发现有大...

CrazyManDF
9分钟前
0
0
web3j转账

 web3 转账功能   为了完成以太坊交易,必须有几个先决条件   1、对方的以太坊地址   2、确定要转账的金额   3、自己地址的转账权限   4、大于转账金额的以太币,以太币转账其实就...

智能合约
10分钟前
0
0
10.28 rsync工具介绍 , rsync常用选项, rsync通过ssh同步

rsync远程同步 重点!重点!!重点!!! 例子 • rsync -av /etc/passwd /tmp/1.txt • rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt rsync格式 • rsync [OPTION] … SRC DEST • rs......

Linux_老吴
24分钟前
0
0
iis php 环境搭建,非常详细的教程

准备篇 一、环境说明: 操作系统:Windows Server 2016 PHP版本:php 7.1.0 MySQL版本:MySQL 5.7.17.0 二、相关软件下载: 1、PHP下载地址: http://windows.php.net/downloads/releases/ph...

T_star
26分钟前
0
0
Day35 rsync通过服务同步

rsync通过服务同步 rsyncd.conf配置文件详解 port:指定在哪个端口启动rsyncd服务,默认是873端口。 log file:指定日志文件。 pid file:指定pid文件,这个文件的作用涉及服务的启动、停止等...

杉下
31分钟前
1
0
【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库

编译 Luajit 库,的确是一个挑战。因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了。以前只是编译了适用于真机的 Luajit 库。最近在尝试编译模拟器 Luajit 库,就顺便梳理了...

ios122
31分钟前
0
0
rsync至ssh同步

rsync: 文件同步工具,可实现“增量拷贝”;使用yum安装rsync包 常用选项:-a=-rtplgoD (-r同步目录,-t保持文件的时间属性,-p保持文件的权限属性,-l保持软连接,-g保持文件的属组,-o保持...

ZHENG-JY
37分钟前
0
0
TradingView 学习笔记

#前言 公司最后需要使用TradingView展示K线图走势。由于之前没接触过,拿到文档时一脸蒙逼。还好找到二篇文章+Demo代码,直接改改就行了。 #被批 由于上面的懵懂,有个问题困扰4个小时没解决...

hihubs
37分钟前
0
0
10.28 rsync工具介绍~10.31 rsync通过ssh同步

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

洗香香
39分钟前
1
0
卷积为什么要旋转180度

参考《最容易理解的对卷积(convolution)的解释》 https://blog.csdn.net/bitcarmanlee/article/details/54729807 这篇博客详细讲解了“卷积”,提及了为什么要反转180度,我简述下。 1.卷积的...

datadev_sh
48分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部