spirngmvc如何实现直接输入网页重定向到登录_Python 模拟新浪微博登录
點擊上方“小猿學?Python”,選擇“置頂公眾號”
作者:北島知寒
鏈接:https://www.cnblogs.com/crazyacking/p/5232286.html
當我們試圖從新浪微博抓取數據時,我們會發現網頁上提示未登錄,無法查看其他用戶的信息。
模擬登錄是定向爬蟲制作中一個必須克服的問題,只有這樣才能爬取到更多的內容。
實現微博登錄的方法有很多,一般我們在模擬登錄時首選WAP版。
因為PC版網頁源碼中包括很多的js代碼,提交的內容也更多,不適合機器模擬登錄。
我們實現微博登錄的大體思路是這樣的:
- 用抓包工具把正常登錄時要提交的字段都記錄下來;
- 模擬提交這些字段;
- 判斷是否登錄成功;
原理很簡單,讓我們一步一步來實現吧。
一.抓包利器Fiddler
在電腦和互聯網之間的通信是通過不同的數據包收發來實現的。
Fiddler可以從中間對數據進行攔截,拷貝一份數據以后再將數據發送給目的端。(這也是為什么說咖啡館的公共WIFI不安全的原因)
同類的還有WireShark。為何這兒不用WireShark呢?
Wireshark太過于專業了,它可以實現抓取各種包,抓下來的包也很亂,針對性沒Fiddler那么強。
下載安裝
1.下載地址:http://www.telerik.com/fiddler
2.安裝方法:fiddler依賴.Net環境,如果已經有則無需配置,直接點擊下一步就行。
使用方法
1.啟動Fiddler
2.配置Fiddler
點擊左上角的“ WinConfig”,找到你使用的瀏覽器并勾選,點擊“Save Changes”
3.使用Fiddler開始抓包
打開瀏覽器訪問WAP版新浪微博網站weibo.cn
Fiddler窗口左側找到weibo.cn /pub/的數據包,并雙擊,這時我們就能夠在右側看到抓取到的信息.
找到Cookies字段,這正是我們需要的.
二.Cookies與保持登錄
通俗來說就是服務器端為了確認用戶終端的身份而設定的一種加密標識,它是存儲在本地終端上的。
當然,隨著Cookies技術的發展,Cookies的作用已經不止于用戶身份標識。
當登陸一個網站時,網站往往會請求用戶輸入用戶名和密碼,并且用戶可以勾選“下次自動登錄”。
如果勾選了,那么下次訪問同一個網站時,用戶會發現沒輸入用戶名和密碼就已經登錄了。
這正是因為前一次登陸時服務器發送了包含登錄憑據(用戶名+密碼的某種加密形式)的Cookie到用戶的硬盤上。
第二次登錄時,如果該Cookies尚未到期,瀏覽器會發送該Cookies,服務器驗證憑據,于是不必輸入用戶名和密碼就讓用戶登錄了。
三.Cookies模擬登錄
下面將介紹使用 Fiddler 獲取新浪微博 Cookies,然后使用 Requests 提交 Cookies 從而實現模擬登錄。
抓取登錄數據包 使用Fiddler抓取數據包.
獲取Cookies 打開新浪微博WAP版頁面(weibo.cn),點擊登錄,然后填寫賬號密碼,勾選“記住登錄狀態”,切記要勾選此項.
登錄成功后,從Fiddler中選擇最新的那個weibo.cn,然后復制Cookies字段的內容,填寫到代碼內.
代碼如下:
#!/usr/bin/env?python#coding=utf8
"""?Simulate?a?user?login?to?Sina?Weibo?with?cookie.
You?can?use?this?method?to?visit?any?page?that?requires?login.
"""
import?urllib2
import?re
#?get?your?cookie?from?Fiddler11
cookie?=?'your-cookie'
headers?=?{
???'User-Agent':?'Mozilla/5.0?(Windows?NT?6.1;?rv:24.0)?Gecko/20100101?Firefox/24.0',
???'cookie':?cookie
}
def?visit():
???url?=?'http://weibo.com'
???req?=?urllib2.Request(url,?headers=headers)
???text?=?urllib2.urlopen(req).read()
#?print?the?title,?check?if?you?login?to?weibo?sucessfully
???pat_title?=?re.compile('(.+?)')
???r?=?pat_title.search(text)
???if?r:
???????print(r.group(1))
if?__name__?==?'__main__':
???visit()?
四.使用 Post 提交數據的方法實現模擬登錄
由于使用Cookies登錄存在很多的弊端,一般我們都使用Post提交數據的方法來實現模擬登錄.
- 通過Fiddler來抓取http數據包來分析該網站的登錄流程;
- 分析抓到的post包的數據結構和header,要根據提交的數據結構和heander來構造自己的post數據和header;
- 構造自己的HTTP數據包,并發送給指定url;
- 通過urllib2等幾個模塊提供的API來實現request請求的發送和相應的接收;
大部分網站登錄時需要攜帶cookie,所以我們還必須設置cookie處理器來保證cookie.
如果遇到登錄后網站重定向到其他url這種情況,我們可以使用chrome的審查元素功能找出重定向后的網站url和該網站的提交數據,再次使用post方法就行.
代碼如下:
#!/usr/bin/python???
import?HTMLParser??
import?urlparse??
import?urllib??
import?urllib2??
import?cookielib??
import?string??
import?re??
?
#登錄的主頁面??
hosturl?=?'******'?//自己填寫??
#post數據接收和處理的頁面(我們要向這個頁面發送我們構造的Post數據)??
posturl?=?'******'?//從數據包中分析出,處理post請求的url??
?
#設置一個cookie處理器,它負責從服務器下載cookie到本地,并且在發送請求時帶上本地的cookie??
cj?=?cookielib.LWPCookieJar()??
cookie_support?=?urllib2.HTTPCookieProcessor(cj)??
opener?=?urllib2.build_opener(cookie_support,?urllib2.HTTPHandler)??
urllib2.install_opener(opener)??
?
#打開登錄主頁面(他的目的是從頁面下載cookie,這樣我們在再送post數據時就有cookie了,否則發送不成功)??
h?=?urllib2.urlopen(hosturl)??
?
#構造header,一般header至少要包含一下兩項。這兩項是從抓到的包里分析得出的。??
headers?=?{'User-Agent'?:?'Mozilla/5.0?(Windows?NT?6.1;?WOW64;?rv:14.0)?Gecko/20100101?Firefox/14.0.1',??
??????????'Referer'?:?'******'}??
#構造Post數據,他也是從抓大的包里分析得出的。??
postData?=?{'op'?:?'dmlogin',??
???????????'f'?:?'st',??
???????????'user'?:?'******',?//你的用戶名??
???????????'pass'?:?'******',?//你的密碼
???????????'rmbr'?:?'true',???//特有數據,不同網站可能不同??
???????????'tmp'?:?'0.7306424454308195'??//特有數據,不同網站可能不同??
???????????}??
?
#需要給Post數據編碼??
postData?=?urllib.urlencode(postData)??
?
#通過urllib2提供的request方法來向指定Url發送我們構造的數據,并完成登錄過程??
request?=?urllib2.Request(posturl,?postData,?headers)??
print?request??
response?=?urllib2.urlopen(request)??
text?=?response.read()??
print?text
總結
以上是生活随笔為你收集整理的spirngmvc如何实现直接输入网页重定向到登录_Python 模拟新浪微博登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql模板引擎有哪些_ecshop用
- 下一篇: 多张图片合并pdf在线打印(多张图片合并