当前位置: 首页 > 工具软件 > mechanize > 使用案例 >

Mechanize模拟浏览器

施锋
2023-12-01

简介:

Mechanize 是一个 Python 模块,用于模拟浏览器。由于考虑到爬虫所需要的是数据,所以该模块完全可以绕过验证码,直接使用 Cookie 登录就可以了。但是 Mechanize 模块使用 Cookie 登录,Cookie 的生存期较短,而且该模块也不支持 JavaScript。总体来说,该模块在面对验证码问题,算是个非常好的办法,应推荐使用。


该模块的具体用法如下

使用方法一

import mechanize #导入模块

br = mechanize.Browser()
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_gzip(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

header = [

('Cookie', 'PHPSESSID=11eb50f5bec637ec3506307daf1e02ea; ECS_ID=ef9ff8c13f0c4215c7935da16a7b206ca03c44fa; bdshare_firstime=1484752989129; Hm_lvt_6424edc88ffc5606738fadb6f51be89f=1484574708,1484752969; Hm_lpvt_6424edc88ffc5606738fadb6f51be89f=1484757613'), 

('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/55.0.2883.87 Chrome/55.0.2883.87 Safari/537.36')

] 
#获取用户登录百度后的Request Headers里面的Cookie值 和 User-Agent,
#其中,Cookie含有账号和密码信息,User-Agent是说明该请求是浏览器请求的,不是网络爬虫。
#需要注意的是,这些Cookie和User-Agent值,根据自己的情况去设置

br.addheaders = getHeaders(header)

#以上都是初始化操作,下面正式操作
br.open('https://www.baidu.com') #打开百度

result = br.response().read() #输出该网页的代码内容,

#若接触过BeautifulSoup,可以将获得的 result 网页内容,用于以下方法处理:

soup = BeautifulSoup(result,'lxml')#剩下的,可以用 BeautifulSoup的知识去解决了

#在安装好必要的模块后,以上代码可以直接拿过来使用

使用方法二

Mechanize模拟浏览器还有其他一些操作,如下

for form in br.forms():
    print(form)

输出结果如下:

<f GET https://www.baidu.com/s application/x-www-form-urlencoded
  <HiddenControl(ie=utf-8) (readonly)>
  <HiddenControl(f=8) (readonly)>
  <HiddenControl(rsv_bp=1) (readonly)>
  <HiddenControl(rsv_idx=1) (readonly)>
  <HiddenControl(ch=) (readonly)>
  <HiddenControl(tn=baidu) (readonly)>
  <HiddenControl(bar=) (readonly)>
  <TextControl(wd=)>
  <SubmitControl(<None>=百度一下) (readonly)>
  <HiddenControl(rn=) (readonly)>
  <HiddenControl(oq=) (readonly)>
  <HiddenControl(rsv_pq=8e85a2600001382e) (readonly)>
  <HiddenControl(rsv_t=e2292vaXa6IOboaARHGB3ajcHkUM/7/UPf2NufNR+ninqHO+83EQ8YY76sg) (readonly)>
  <HiddenControl(rqlang=cn) (readonly)>>

从输出的结果可以看出,其中< HiddenControl(f=8) (readonly) >是以 名字为 f 的框架(有时候框架没有名字,那就只能使用它们的顺序来选择);输入文字的位置为文本输入框 < TextControl(wd=) >。选择框架,在框架内输入数据后提交数据。以搜索“Python 网络爬虫” 为例,

br.select_form(name='f')
br.form['wd'] = 'Python 网络爬虫'
br.submit() # 提交
result = br.response().read() 

#输出结果,可以将结果用BeautifulSoup来处理,即soup = BeautifulSoup(result,'lxml'),然后提取想要的数据

使用方法三

查看返回页面的链接,例如:

for link in br.links():
    print("%s : %s" %(link.url,link.text))

使用方法四

使用mechanize浏览器打开指定链接,例如:

newLink = br.click_link(text='自己动手写网络爬虫')
br.open(newLink)
 类似资料: