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:[email protected]: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