2013年1月5日 星期六

mechanize 模擬瀏覽器

文章參考來源: http://stockrt.github.com/p/emulating-a-browser-in-python-with-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')] 
 
將以上程式碼存成 browser.py , 丟到python27/lib 目錄裡
這樣一個簡單實用的陽春型模擬器就完成了。 
我們每次要用時就可以很方便的呼叫出來用
 
>>> from browser import br
 
到無名逛逛
 
>>> html = br.open('http://www.wretch.cc/blog/').read()
>>> br.title()
'Blog - Wretch.cc'
 
這樣我們就已經到了無名
如果想登入的話,我們可以打開登入的網址
 
>>> html = br.open('https://login.yahoo.com/config/login?.intl=tw&.partner=&.last=&.src=wrtch&.scrumb=0&.pd=c=R.kjIs2p2e5IjYgxHnmFvubWqw--&pkg=&stepid=i&&.done=https%3a//login.yahoo.com/config/validate%3f.src=wrtch%26.pc=1164%26.scrumb=0%26.done=http%3a//www.wretch.cc/IDintegration/?ref=%25252Fblog%25252F').read() 
>>> print br.title()
登入 - Yahoo!奇摩

 
登入的網址挺長的
 
>>> for f in br.forms():
 print f

會將網頁的form秀給我們看
 >>> br.select_form(name="login_form")

得看網頁的form 設什麼名字,萬一沒有設,我們可以用

>>> br.select_form(nr=0)  # 看是第幾個form,數字就輸入多少

如果還查找不到,那麼form可能是用javascript動態生成,在此就不介紹處理方法。

>>> br.form['login'] = '帳號'
>>> br.form['passwd'] = '密碼'
>>> br.submit()                                   #請程式送出登入form

成功的話,我們就可以以登入帳號的狀態去瀏覽無名網站。

再配合

Beautiful Soup, re, XPath(lxml)

等查找網頁元素資料工具,想要什麼資料將是輕而易舉!

# 以XPath 簡單示範一下
import lxml.html as H  

>>> html = br.open('http://www.wretch.cc/blog/XXXXXX').read()  
>>> blog = H.document_fromstring(html)                                        #格式化網頁資料元素
>>> who = blog.xpath("//div[@id='whowrapper']/ul/li/a/@href")       #抓出誰來我家連結
>>> for w in who:
    print w

   
http://tw.rd.yahoo.com/referurl/wretch/blog/user/whocome/*http://www.wretch.cc/blog/as12345634
http://tw.rd.yahoo.com/referurl/wretch/blog/user/whocome/*http://www.wretch.cc/blog/xdxd0819
http://tw.rd.yahoo.com/referurl/wretch/blog/user/whocome/*http://www.wretch.cc/blog/s5725j5725
http://tw.rd.yahoo.com/referurl/wretch/blog/user/whocome/*http://www.wretch.cc/blog/baibai0914
http://tw.rd.yahoo.com/referurl/wretch/blog/user/whocome/*http://www.wretch.cc/blog/happy880328
http://tw.rd.yahoo.com/referurl/wretch/blog/user/whocome/*http://www.wretch.cc/blog/candy88622
http://tw.rd.yahoo.com/referurl/wretch/blog/user/whocome/*http://www.wretch.cc/blog/alice21622
http://tw.rd.yahoo.com/referurl/wretch/blog/user/whocome/*http://www.wretch.cc/blog/cul3977ssy
http://tw.rd.yahoo.com/referurl/wretch/blog/user/whocome/*http://www.wretch.cc/blog/weary898
>>>

這樣我們就知道誰來過了
Chrome  瀏覽器,可以查看網頁元素 轉 xpath,很方便。



沒有留言:

張貼留言