python3.4 獲取cookie後繼續訪問其他頁面
http://blog.csdn.net/pipisorry/article/details/47948065
實戰1:使用cookie登入哈工大ACM站點
獲取站點登入地址
http://acm.hit.edu.cn/hoj/system/login
檢視要傳送的post資料
user和password
Code:
#!/usr/bin/env python # -*- coding: utf-8 -*- """ __author__ = 'pi' __email__ = 'pipisorry@126.com' """ import urllib.request, urllib.parse, urllib.error import http.cookiejar LOGIN_URL = 'http://acm.hit.edu.cn/hoj/system/login' values = {'user': '******', 'password': '******'} # , 'submit' : 'Login' postdata = urllib.parse.urlencode(values).encode() user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36' headers = {'User-Agent': user_agent, 'Connection': 'keep-alive'} cookie_filename = 'cookie.txt' cookie = http.cookiejar.MozillaCookieJar(cookie_filename) handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) request = urllib.request.Request(LOGIN_URL, postdata, headers) try: response = opener.open(request) page = response.read().decode() # print(page) except urllib.error.URLError as e: print(e.code, ':', e.reason) cookie.save(ignore_discard=True, ignore_expires=True) # 儲存cookie到cookie.txt中 print(cookie) for item in cookie: print('Name = ' + item.name) print('Value = ' + item.value) get_url = 'http://acm.hit.edu.cn/hoj/problem/solution/?problem=1' # 利用cookie請求訪問還有一個網址 get_request = urllib.request.Request(get_url, headers=headers) get_response = opener.open(get_request) print(get_response.read().decode()) # print('You have not solved this problem' in get_response.read().decode())
Note:
1. 直接open http://acm.hit.edu.cn/hoj/problem/solution/?
problem=1頁面不知道去哪了,根本不是直接用瀏覽器登入後的介面!
用cookie登入就能夠正常訪問。html程式碼中會有一句話you have not solved this problem。由於我沒做這道題。
2. 原理:建立一個帶有cookie的opener,在訪問登入的URL時,將登入後的cookie儲存下來,然後利用這個cookie來訪問其它網址。檢視登入之後才幹看到的資訊。[python 3.3.2 爬蟲記錄]
反覆使用cookie登入
上面程式碼中我們儲存cookie到檔案裡了,以下我們能夠直接從檔案匯入cookie進行登入,不用再構建包括username和password的postdata了
import urllib.request, urllib.parse, urllib.error import http.cookiejar cookie_filename = 'cookie.txt' cookie = http.cookiejar.MozillaCookieJar(cookie_filename) cookie.load(cookie_filename, ignore_discard=True, ignore_expires=True) print(cookie) handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) get_url = 'http://acm.hit.edu.cn/hoj/problem/solution/?problem=1' # 利用cookie請求訪問還有一個網址 get_request = urllib.request.Request(get_url) get_response = opener.open(get_request) print(get_response.read().decode())
皮皮Blog
實戰2:使用cookie登入伯樂線上
獲取站點登入地址
1. chrome瀏覽器中按F12審查元素 > Network > Headers > General > Request URL: http://www.jobbole.com/login/?redirect=http://www.jobbole.com/
然而這個並非其真實站點登入網址^-^
2. 也能夠下載軟體Fiddler
for .NET2檢視相關資訊。執行python程式訪問和直接在瀏覽器中重新整理都能夠在fiddler中找到相關資訊。
Note: fiddler事實上是抓包用的,是獨立的工具。類似這樣的前端登入動作,也能夠用casperjs。還能夠用HttpWatch瀏覽器嵌入工具。
檢視200所在的條目(200:請求成功 處理方式:獲得響應的內容,進行處理)
以下是登入後看到的request中有webforms的資訊相應的網址是也就是其真實站點登入網址http://www.jobbole.com/wp-admin/admin-ajax.php
(嚇死爺了。第一次上傳居然忘了把password遮住!
)
檢視要傳送的post資料
1. 上面使用fiddler看到的webforms就是登入要用的post資料要包括的(當中redict_url是能夠不加上去的)
2. 或者使用瀏覽器Elements > html文件中所要提交的資料有name和password。然而這個並非真實的post資料^-^
檢視headers資訊
假設不自己加入headers資訊中的User-Agent。python程式碼登入時會預設使用User-Agent: Python-urllib/3.4
我們在chrome瀏覽器中按F12審查元素 > Network > Headers中能夠看到User-Agent應該設定為:'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
一般要加入的headers資訊有:
'Host': '', 'Accept': '', 'User-Agent': '', 'Accept-Language': '', Accept-Encoding
登入後檢視request headers
發現cookie發生了變化,加上了username***和password*************
#!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = '' __author__ = 'pi' __mtime__ = '8/23/2015-023' __email__ = 'pipisorry@126.com' # code is far away from bugs with the god animal protecting I love animals. They taste delicious. ┏┓ ┏┓ ┏┛┻━━━┛┻┓ ┃ ☃ ┃ ┃ ┳┛ ┗┳ ┃ ┃ ┻ ┃ ┗━┓ ┏━┛ ┃ ┗━━━┓ ┃ 神獸保佑 ┣┓ ┃ 永無BUG。 ┏┛ ┗┓┓┏━┳┓┏┛ ┃┫┫ ┃┫┫ ┗┻┛ ┗┻┛ """ import urllib.request, urllib.parse, urllib.error import http.cookiejar LOGIN_URL = 'http://www.jobbole.com/wp-admin/admin-ajax.php' get_url = 'http://www.jobbole.com/' # 利用cookie請求訪問還有一個網址 values = {'action': 'user_login', 'user_login': '*****', 'user_pass': '******'} postdata = urllib.parse.urlencode(values).encode() user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36' headers = {'User-Agent': user_agent} cookie_filename = 'cookie_jar.txt' cookie_jar = http.cookiejar.MozillaCookieJar(cookie_filename) handler = urllib.request.HTTPCookieProcessor(cookie_jar) opener = urllib.request.build_opener(handler) request = urllib.request.Request(LOGIN_URL, postdata, headers) try: response = opener.open(request) # print(response.read().decode()) except urllib.error.URLError as e: print(e.code, ':', e.reason) cookie_jar.save(ignore_discard=True, ignore_expires=True) # 儲存cookie到cookie.txt中 for item in cookie_jar: print('Name = ' + item.name) print('Value = ' + item.value) get_request = urllib.request.Request(get_url, headers=headers) get_response = opener.open(get_request) print('個人主頁' in get_response.read().decode())Note:
2. cookie登入成功時會輸出:
Name = wordpress_0efdf49af511fd88681529ef8c2e5fbf
Value = *****%***%*******************(value中會包括賬戶和password)
而且jobbole_response.read()輸出中存在“個人主頁”“退出登入”字樣。就說明登入成功了。否則僅僅會有“登入”“註冊”之類的字串。
使用剛剛儲存的cook_jar.txt檔案登入參見[python爬蟲 - Urllib庫及cookie的使用 - 從檔案裡獲取Cookie並訪問]
皮皮Blog
實戰3:使用cookie登入知乎
眼下知乎採用動態驗證碼破解還沒驗證。這樣post裡面還須要captcha的引數。待定。。。
Note:這個_xsrf事實上能夠不submit,它已經作為cookie寫進去了。能夠看看登入www.zhihu.com的返回的header。
實戰4:使用cookie登入本科站點爬取成績資訊
注意這個站點是https的站點。只是和上面的cookie登入的http站點一樣登入。登入的是電子科大門戶(由於小編就是UESTC的嘛)
獲取本科站點登入地址
1. chrome瀏覽器中按F12審查元素 > Network > Headers > General > Request URL:https://uis.uestc.edu.cn/amserver/UI/Login
能夠看到其真實站點登入網址為https://uis.uestc.edu.cn/amserver/UI/Login
2. 當然也能夠用fiddler抓取https的請求,只是要配置一下:Tools > fiddler options > https > capture...和decrypt都打√ > 然後依據提示安裝一證照yes就能夠了
檢視要傳送的post資料
開啟fiddler後。瀏覽器中登入門戶站點,在fidddles中看到相應的webforms實際提交的資料。只是也僅僅要IDToken1', 'IDToken2這兩個資料。
程式碼
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = 'pi'
__email__ = 'pipisorry@126.com'
"""
import urllib.request
import urllib.parse
import urllib.error
import http.cookiejar
LOGIN_URL = r'https://uis.uestc.edu.cn/amserver/UI/Login' # 登入教務系統的URL
get_url = 'http://eams.uestc.edu.cn/eams/teach/grade/course/person.action' # 利用cookie請求訪問還有一個網址
values = {'IDToken1': '201106******', 'IDToken2': '***********'}
postdata = urllib.parse.urlencode(values).encode()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}
cookie_filename = 'cookie_jar.txt'
cookie_jar = http.cookiejar.MozillaCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie_jar)
opener = urllib.request.build_opener(handler)
request = urllib.request.Request(LOGIN_URL, postdata, headers)
try:
response = opener.open(request)
# print(response.read().decode())
except urllib.error.URLError as e:
print(e.code, ':', e.reason)
cookie_jar.save(ignore_discard=True, ignore_expires=True) # 儲存cookie到cookie.txt中
for item in cookie_jar:
print('Name = ' + item.name)
print('Value = ' + item.value)
get_request = urllib.request.Request(get_url, headers=headers)
get_response = opener.open(get_request)
print(get_response.read().decode())
小編已gui,裡面什麼也沒了。顯示沒有資訊!
相關文章
- Cookie 獲取訪問時間Cookie
- 利用XMLHTTP 從其他頁面獲取資料 (轉)XMLHTTP
- java獲取前端頁面傳送的cookie中的資訊Java前端Cookie
- java後臺獲取cookieJavaCookie
- 禁用 COOKIE 後如何訪問 SESSION 問題CookieSession
- 頁面增加CookieCookie
- springmvc 後臺獲取cookie的方法SpringMVCCookie
- 前後端頁面分離導致session無法正常獲取的問題後端Session
- Chrome訪問https頁面顯示ERR_CERT_INVALID,且無法跳過繼續訪問 本地證書過期處理ChromeHTTP
- PBOOTCMS網站訪問頁面提示:您訪問的頁面不存在,請核對後重試!如何改成自動404跳轉頁面boot網站
- Express 配置HTML頁面訪問ExpressHTML
- IP頁面訪問域名介面問題
- 動態解析521響應Cookie失效後,爬蟲如何繼續?Cookie爬蟲
- Vue網站釋出到iis後提示404頁面不可訪問Vue網站
- laravel 500頁面不能正常訪問Laravel
- JavaScript-滑鼠獲取頁面座標JavaScript
- 獲取微信小程式頁面路徑微信小程式
- 如何獲取Cookie並使用Cookie侵入Cookie
- HttpServletRequest 獲取 CookieHTTPServletCookie
- request 獲取不到 CookieCookie
- requests模組獲取cookieCookie
- 獲取cookie辦法Cookie
- 如何獲取cookie值Cookie
- JavaScript子頁面和父頁面相互訪問JavaScript
- javascript獲取當前頁面的來路頁面地址JavaScript
- vue 獲取頁面詳情後 切換頁面時 如何監聽使用者是否修改過資訊Vue
- layui獲取頁面checkbox核取方塊值UI
- nginx設定預設訪問頁面Nginx
- Nginx 配置訪問 swagger 頁面NginxSwagger
- 微信小程式攜帶引數跳轉頁面/獲取頁面棧微信小程式
- js實現父頁面獲取iframe子頁面內容程式碼JS
- JavaScript 獲取div在頁面中座標JavaScript
- appium 獲取混合頁面元素失敗APP
- js獲取操作iframe子頁面中元素JS
- ThinkPHP 在頁面獲取當前時間PHP
- 在cs頁面獲取input的值方法
- PHP獲取當前頁面完整URL地址PHP
- GlobalSign證書過期不續費還可繼續訪問嗎