爬蟲 mechanize初步,爬蟲mechanize

來源:互聯網
上載者:User

爬蟲 mechanize初步,爬蟲mechanize

Mechanize

 

本文僅為學習筆記,歡迎大家交流和指出錯誤

以下是基本操作:

 

 1 import mechanize 2 #建立一個瀏覽器對象 3 br = mechanize.Browser() 4 #以下是一些基本設定 5 #設定是否處理HTML html-equiv標題,當瀏覽器等裝置接收伺服器端傳送的檔案時,首先會接收檔案的相關成對的名稱和數值。 6 #如:<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 獲得了該html編碼方式 7 br.set_handle_equiv(True) 8 #是否向每個請求發送referer頭。referer是http請求header標題的一部分。頭域的值表明了是哪個URL地址觸發了對當前頁面的訪問。 9 br.set_handle_referer(True)10 #設定是否遵守robots協議11 br.set_handle_robots(False)12 #設定是否處理重新導向。重新導向(Redirect)就是通過各種方法將各種網路請求重新定個方向轉到其它位置。13 #當網站調整或者網頁被移到一個新的地址或者網頁副檔名發生改變時都會引起重新導向14 br.set_handle_redirect(True)15 #設定是否處理gzip傳輸編碼。gzip是一種資料壓縮格式。16 #GZIP壓縮的比率往往在3到10倍,也就是本來90k大小的頁面,採用壓縮後實際傳輸的內容大小只有28至30K大小,這可以大大節省伺服器的
  網路頻寬,同時如果應用程式的響應足夠快時,網站的速度瓶頸就轉到了網路的傳輸速度上,因此內容壓縮後就可以大大的提升頁面的瀏覽速度。17 br.set_handle_gzip(True)18 19 br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(),max_time=1)20 #設定debug相關的吧21 br.set_debug_http(True)22 br.set_debug_redirects(True)23 br.set_debug_response(True)24 #設定http header 就是告訴網站,我是個來自Mozilla瀏覽器的訪問,不是爬蟲25 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')]26 #開啟網址。27 br.open("http://www.baidu.com")28 #被開啟的網址會有一個架構,可以檢視方塊架,對架構進行操作,來完成複雜的互動29 for form in br.forms():30   print form

 

 

 從可以看出,只有一個名字為 f 的架構。有的時候架構並沒有名字,那就只能按順序排序,第一個就是 nr = 0 ,第二個就是 nr = 1,以此類推

1 #選擇架構 f2 br.select_form(name='f')3 #向架構中的wd寫寫入要搜尋的內容4 br.form['wd'] = 'python'5 #提交,就相當於點擊了百度網頁的搜尋按鈕6 br.submit()7 #查看一下開啟的網頁是否是期望中的8 print(br.title())

 

運行結果如下:


 1 #也可以輸出html文本 2 print br.response().read() 3 #由於過長,此處略 4 #輸出這個網頁中的所有url 5 for link in br.links(): 6   print("text:%s , url:%s"%(link.text,link.url)) 7 #即為其url資訊 8 #還可以選擇連結再次開啟 9 newUrl = br.click_link(text='可以用 Python 程式設計語言做哪些神奇好玩的事情? - 知乎')10 br.open(newUrl)11 #就運用到上述的操作就可以對網頁進行互動操作,來得到我們想要的12 #也可以使用這個來返回上一頁13 br.back()14 #查看現在的url,檢查是否返回15 print(br.geturl())

 

 1 # 使用 使用者名稱和密碼登陸網站 2 br.add_password('http://你想登陸的網址.com','username','password') 3 #之後再 4 br.open('http://你想登陸的網址.com') 5 #也可以先開啟網站,之後輸出form。利用br.form['username'] = ''方式來登陸 6  7  8 #擷取cookie並使用cookie登陸  需要先登陸進網站才能擷取該網站的cookie 9 #下例為擷取zhihu的cookie的例子10 import cookielab,mechanize11 br.mechanize.Browser()12 br.open('https://www.zhihu.com/question/56932365/answer/246810982')13 c = cookie.LWPCookieJar()14 br.back()15 br.set_cookiejar()16 br.open('https://www.zhihu.com/question/56932365/answer/246810982')17 18 #設定proxy19 br.set_proxies({'https','xxx.xxx.xxx.xx:xxx'})20 br.add_proxy_password('username','password')21 #或者22 br.set_proxies('http','username:password@xxx.xxx.xxx.xx:xxx')

 

mechanize初始化Browser()的時候,如果你不給他傳一個history對象作為參數,Browser()就會按照預設的方式(允許儲存操作曆史)來進行初始化,這樣以來每次都會儲存,就會佔據記憶體,導致越來越慢。

解決:自訂一個NoHistory對象 傳給它:

class NoHistory(object):  def add(self, *a, **k): pass  def clear(self): pass  b = mechanize.Browser(history=NoHistory())

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.