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

Python使用mechanize模拟浏览器的更多相关文章

  1. python之mechanize模拟浏览器

    安装 Windows: pip install mechanize Linux:pip install python-mechanize 个人感觉mechanize也只适用于静态网页的抓取,如果是异步 ...

  2. Python 配置 selenium 模拟浏览器环境,带下载链接

    使用浏览器渲染引擎.直接用浏览器在显示网页时解析HTML,应用CSS样式并执行JavaScript的语句. 这方法在爬虫过程中会打开一个浏览器,加载该网页,自动操作浏览器浏览各个网页,顺便把数据抓下来 ...

  3. python下selenium模拟浏览器基础操作

    1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...

  4. Python requests库模拟浏览器行为的一些技巧记录

    如下都是一些经验之谈,不定期更新,喜欢可以关注哦. 忽略ssl报错 一些证书问题会导致程序报错,解决方法为在发送请求的时候,带上verify=False参数即可: result = requests. ...

  5. 使用python selenium webdriver模拟浏览器

    selenium是进行web自动化测试的一个工具,支持C,C++,Python,Java等语言,他能够实现模拟手工操作浏览器,进行自动化,通过webdriver驱动浏览器操作,我使用的是chrome浏 ...

  6. 【Python】 Selenium 模拟浏览器 寻路

    selenium 最开始我碰到SE,是上学期期末,我们那个商务小组做田野调查时发的问卷的事情.当时在问卷星上发了个问卷,但是当时我对另外几个组员的做法颇有微词,又恰好开始学一些软件知识了,就想恶作剧( ...

  7. python使用mechanize模拟登陆新浪邮箱

    mechanize相关知识准备: mechanize.Browser()<br># 设置是否处理HTML http-equiv标头 set_handle_equiv(True)<br ...

  8. 第14.6节 使用Python urllib.request模拟浏览器访问网页的实现代码

    Python要访问一个网页并读取网页内容非常简单,在利用<第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头>的方法构建了请求http报文的请求头情况下,使 ...

  9. python 爬照片 模拟浏览器 先登录账号

    # -*- coding: utf-8 -*-"""Created on Mon Mar 7 10:53:40 2016 @author: root"" ...

随机推荐

  1. c# 网站发布

    .net 网站发布简单步骤: 1.选择需要发布的网站,右击->发布 1)配置文件:可以任意新建文件配置名 2)连接: 发布方法选择系统文件:选择目标位置,任意新建一个位置即可. 3)设置:选择D ...

  2. FckEditor组件的使用(新闻浏览发布页面)

    FckEditor组件的使用 准备工作: 1)将FckEditor目录拷贝到网站根目录内. 2)在Web.config的AppSetting分支中添加如下的代码,并修改FckEditor的目录和上传文 ...

  3. Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view...

    Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tabl ...

  4. JavaScript--函数-按值传递

    按值传递(byValue): 两个变量间赋值或将变量作为参数传入函数时,其实都是将原变量中的值,赋值一份给对方(新变量) 对原始类型的值: 修改新变量,不会影响原变量 对引用类型的对象: 通过新变量修 ...

  5. Hive学习之一 《Hive的介绍和安装》

    一.什么是Hive Hive是建立在 Hadoop 上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据 ...

  6. 激活office 2013

    1.下载office 2013激活工具:microsoft toolkit 2.解压文件,运行Microsoft Toolkit.exe,选择office,即箭头标识处

  7. 各种driver的继承关系

    AndroidDriver extends AppiumDriver extends DefaultGenericMobileDriver extends RemoteWebDriver

  8. 关于$_SERVER 常量 HTTP_X_FORWARDED_HOST与 HTTP_HOST的问题

    今天在看ecshop的源码,发现了用$_SERVER['HTTP_X_FORWARDED_HOST']来判断主机的地址,就目前来说很多人都是直接通过$_SERVER['HTTP_HOST']来判断的, ...

  9. Python自动化运维之19、Paramiko模块和堡垒机实战

    paramiko模块 paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实 ...

  10. 你不知道的JavaScript(作用域和闭包)

    作用域和闭包 ・作用域 引擎:从头到尾负责整个JavaScript的编译及执行过程. 编译器:负责语法分析及代码生成等. 作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非 ...