zoukankan      html  css  js  c++  java
  • Python使用mechanize模拟浏览器

    Python使用mechanize模拟浏览器

    之前我使用自带的urllib2模拟浏览器去进行訪问网页等操作,非常多站点都会出错误,还会返回乱码。之后使用了 mechanize模拟浏览器,这些情况都没出现过,真的非常好用。这里向大家推荐一下。
    mechanize是对urllib2的部分功能的替换,能够更好的模拟浏览器行为,在web訪问控制方面做得更全面。

    首先从安装開始吧,以ubuntu系统为例:

    python 绝大部分第三方软件包。都是标准安装方式,从官网下载之后。解压到一个文件夹内,然后在这个文件夹内执行这个命令即可了:

    python setup.py install

    官网网址:
    http://wwwsearch.sourceforge.net/mechanize/

    更方便的方法就是:

    先安装easy_install工具:

    正常情况下。我们要给Python安装第三方的扩展包。我们必须下载压缩包,解压缩到一个文件夹,然后命令行或者终端打开这个文件夹,然后执行
    python setup.py install
    来进行安装。


    而使用easy_install我们就能够直接命令行执行
    easy_install xxx
    就把最新版的xxx包装上去了
    所以easy_install就是为了我们安装第三方扩展包更容易

    安装方法:

    首先下载easy_install的安装包。下载地址:
    http://pypi.python.org/pypi/setuptools

    下载自己对应的版本号,windows上面直接执行exe安装就能够了

    linux上面能够直接执行
    sh setuptools-0.6c9-py2.4.egg

    安装完毕后。easy_install会被自己主动拷贝到bin文件夹下,也就是我们的PATH路径下。所以我们在终端中能够直接执行easy_install命令了

    在ubuntu下还有简洁安装方法:

    安装easy_install的命令例如以下:

    sudo apt-get install python-setuptools

    再用easy_install安装Mechanize。即:

    sudo easy_install Mechanize

    安装好之后就能够愉快的使用了。首先是模拟一个浏览器的代码:

    import mechanize
    import cookielib
    
    # Browser
    br = mechanize.Browser()
    
    # Cookie Jar
    cj = cookielib.LWPCookieJar()
    br.set_cookiejar(cj)
    
    # Browser options
    br.set_handle_equiv(True)
    br.set_handle_gzip(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    
    # Follows refresh 0 but not hangs on refresh > 0
    
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
    
    # Want debugging messages?
    
    #br.set_debug_http(True)
    #br.set_debug_redirects(True)
    #br.set_debug_responses(True)
    # User-Agent (this is cheating, ok?)
    
    br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

    这样就得到了一个浏览器的实例,br对象。

    使用这个对象,便能够对网页操作:

    # Open some site, let's pick a random one, the first that pops in mind:
    
    r = br.open('http://www.baidu.com')
    html = r.read()
    
    # Show the source
    
    print html
    
    # or
    
    print br.response().read()
    
    # Show the html title
    
    print br.title()
    
    # Show the response headers
    
    print r.info()
    
    # or
    
    print br.response().info()
    
    # Show the available forms
    
    for f in br.forms():
        print f
    
    # Select the first (index zero) form
    
    br.select_form(nr=0)
    
    # Let's search
    
    br.form['q']='weekend codes'
    br.submit()
    print br.response().read()
    
    # Looking at some results in link format
    
    for l in br.links(url_regex='stockrt'):
        print l
    

    另外假设訪问的站点须要验证(http basic auth),那么:

    # If the protected site didn't receive the authentication data you would
    # end up with a 410 error in your face
    
    br.add_password('http://safe-site.domain', 'username', 'password')
    br.open('http://safe-site.domain')
    

    另外利用这种方法,存储和重发这个session cookie已经被Cookie Jar搞定了。并且能够管理浏览器历史:。除此之外还有众多应用。例如以下载:

    # Download
    
    f = br.retrieve('http://www.google.com.br/intl/pt-BR_br/images/logo.gif')[0]
    print f
    fh = open(f)

    为http设置代理 :

    # Proxy and user/password
    br.set_proxies({"http": "joe:password@myproxy.example.com:3128"})
    # Proxy
    br.set_proxies({"http": "myproxy.example.com:3128"})
    # Proxy password
    br.add_proxy_password("joe", "password")
    

    回退(Back):

    打印url即可验证是否回退

        # Back
        br.back()
        print br.geturl()

    模拟谷歌和百度查询:

    即打印和选择forms,然后填写对应键值。通过post提交完毕操作
    
        for f in br.forms():
            print f
    
        br.select_form(nr=0)
    谷歌查询football
    
        br.form['q'] = 'football'
        br.submit()
        print br.response().read()
    百度查询football
    
        br.form['wd'] = 'football'
        br.submit()
        print br.response().read()
    对应键值名,能够通过打印查出
    

    很多其它的信息大家能够去官网查看

    另外使用mechanize模拟浏览器去不断訪问网页是能够刷各种博客的訪问量的,包含CSDN,我声明一下,我測试刷了10个訪问就不搞了,毕竟刷訪问量是个非常没品的事情。并且没什么意义,好好写一篇博客是为了自己总结自己。也是为了帮助他人,分享经验。去追求什么訪问量。积分是没有意义的,奉劝大家也不要乱搞。并且这个非常容易查的。被查出来的后果但是非常严重的,简单脚本例如以下,这个是刷一个网页100次,间隔1秒:

    #!/usr/bin/env python
    
    import mechanize
    import cookielib
    
    from time import ctime,sleep
    
    def run():
        print 'start!'
        for i in range(100):
            browse()
            print "run",i,"times ",ctime()
            sleep(1)
    
    def browse():
    
        br = mechanize.Browser()
    
        cj = cookielib.LWPCookieJar()
        br.set_cookiejar(cj)
    
        br.set_handle_equiv(True)
        br.set_handle_gzip(True)
        br.set_handle_redirect(True)
        br.set_handle_referer(True)
        br.set_handle_robots(False)
    
        br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
    
        br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
    
    
        r = br.open('http://www.baidu.com')
    
        html = r.read()
    
        #print html
    
    run()
    
    print "!!!!!!!!!!!!!!!!!!all over!!!!!!!!!!!!!!!!!! 
     %s" %ctime()

    我还是学生,写的不好的地方还请多多指正,

    转载请注明出处:

    http://blog.csdn.net/sunmc1204953974

  • 相关阅读:
    新闻项目——项目准备——代码抽取
    新闻项目——立项准备——框架搭建
    测试总结
    OSI——网络层
    软件测试的方法
    flask中cookie和session介绍
    flask数据库基本操作
    csrf原理和flask的处理流程
    xadmin快速搭建后台管理系统
    orm的聚合索引
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5251654.html
Copyright © 2011-2022 走看看