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:[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

时间: 2024-10-13 20:22:22

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

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

1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/geckodriver/releases Chromedriver下载:http://npm.taobao.org/mirrors/chromedriver/ 2.保存路径 将下载好的geckodriver以及Chromedriver解压到桌面,打开我的电脑,找到Python文件夹中anancode文件

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

# -*- coding: utf-8 -*-"""Created on Mon Mar 7 10:53:40 2016 @author: root"""import urllib2import sslfrom selenium import webdriver sel=webdriver.Firefox() loginurl = 'https://18.63.191.89:80/Account/Login' sel.get(loginurl)

Python模拟浏览器实现用户响应

最近工作中遇到一个问题,在集群上运行的任务有时候无法正常结束,或者无法正常启动.这会造成这批运行的任务无法正常结束运行,处于pending的状态,导致后面的任务无法正常启动. 该问题困扰我们项目已经有半年左右了,一直没有想到很好的解决办法.主要原因就是任务的状态只能在浏览器中看出,无法通过后台的日志或者数据库查询得到.在浏览器中,如果我们看到某个任务长时间没有运行时间和状态的变化,就可以把这个任务当做是“僵尸”任务,从而可以将该任务手动结束掉(kill). 春节之后在网上看到一些有关爬虫的文章,

splinter python浏览器自动化操作,模拟浏览器的行为

Splinter可以非常棒的模拟浏览器的行为,Splinter提供了丰富的API,可以获取页面的信息判断当前的行为所产生的结果 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没有更新了.还 有就是利用selenium,可支持多种浏览器.网上资料比较多.经过比较,我选择了Splinter模块,因为利用Splinter开发浏览器自动化操 作,编写代码比较简单. 一.Splinter的安装 Splinter的使用必修依

记:使用python模拟浏览器发送http消息

python自带的urllib,urllib2可以极方便做http操作,在我们按照http方式提交消息请求后,有可能会看见返回这个错误“403 forbidden",这是请求的网站做了阻止,于是我们需要把自己伪装成模拟器.对此,可以加上headers={'User-Agent':user-agent,'cookie':cookie},注意操作的网站 需要登录账号的话,就需要加上cookie,这两个值可以通过chrome的”开发者工具“查看: 把他们加上去,然后在请求值那里再加上: req = u

python爬虫模拟浏览器访问-User-Agent

模拟浏览器访问-User-Agent: import urllib2 #User-Agent 模拟浏览器访问 headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"} #通过urllib2.Request()方法构造一个请求对象 request

在python获取网页的代码中添加头信息模拟浏览器

为什么要添加头部信息,因为有时候有些网页会有反爬虫的设置,导致无法获取正常的网页,在这里,在代码的头部添加一个headers信息,模拟成浏览器去访问网页. 没有添加头部信息的代码 import urllib2 url = "http://blog.51cto.com/lsfandlinux/2046467" file = urllib2.urlopen(url) html = file.read() print html 接下来添加头部信息,首先在浏览器打开百度一下,然后检查网页的头部

Python模拟浏览器实现网页访问

模拟浏览器请求数据: import socket # 创建TCP链接 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # DNS 解析和链接HTTP服务器 tcp_socket.connect(("www.qq.com", 80)) # 编写请求头, 发送HTTP请求报文 # 请求行 request_line = "GET / HTTP/1.1\r\n" # 请求头,设置请求域名 requ

python get post模拟请求

1.使用get方式时,url类似如下格式: [html] view plaincopy index.jsp?id=100&op=bind GET报问头如下: [html] view plaincopy GET /sn/index.php?sn=123&n=asa HTTP/1.1 Accept: */* Accept-Language: zh-cn host: localhost Content-Type: application/x-www-form-urlencoded Content