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!!!!!!!!!!!!!!!!!! \n %s" %ctime()

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

转载请注明出处:

http://blog.csdn.net/sunmc1204953974

目录
相关文章
|
23天前
|
Web App开发 Python
在ModelScope中,你可以使用Python的浏览器自动化库
在ModelScope中,你可以使用Python的浏览器自动化库
15 2
|
7月前
|
Web App开发 测试技术
Selenium+python之隐藏浏览器的“Chrome正在受到自动软件的控制“提示语
Selenium+python之隐藏浏览器的“Chrome正在受到自动软件的控制“提示语
161 0
|
4月前
|
Java 数据安全/隐私保护 C++
一款免配置的浏览器编程工具jupyter,可以同时编写 python,java,c,c++,体积小
一款免配置的浏览器编程工具jupyter,可以同时编写 python,java,c,c++,体积小
76 1
|
2月前
|
JavaScript 前端开发 开发工具
Python之JavaScript逆向系列——3、浏览器的开发工具——源代码的使用
Python之JavaScript逆向系列——3、浏览器的开发工具——源代码的使用
17 0
|
7月前
|
Web App开发 测试技术
Selenium+python之不打开浏览器,来运行测试用例
Selenium+python之不打开浏览器,来运行测试用例
161 0
|
3月前
|
测试技术 Python
python使用selenium操作浏览器的教程
python使用selenium操作浏览器的教程
60 1
python使用selenium操作浏览器的教程
|
8月前
|
Web App开发 Python
Python Chrome handless(无界面浏览器,add_argument 支持哪些参数,替代 PhantomJS)
Python Chrome handless(无界面浏览器,add_argument 支持哪些参数,替代 PhantomJS)
91 0
|
5月前
|
Web App开发 前端开发 JavaScript
Python Selenium 浏览器打印预览
Python Selenium 浏览器打印预览
|
8月前
|
Web App开发 网络协议 前端开发
【从零学习python 】86. 深入了解HTTP协议及其在浏览器和服务器通信中的作用
【从零学习python 】86. 深入了解HTTP协议及其在浏览器和服务器通信中的作用
87 0
|
8月前
|
数据采集 Web App开发 Python
使用Python爬虫获取Firefox浏览器的用户评价和反馈
使用Python爬虫获取Firefox浏览器的用户评价和反馈