1.採用python模擬登陸CSDN的時候分爲三步走:html
1.獲取url=https://passport.csdn.net/account/login;python
2.分析登陸信息:從網頁中獲得username,password和hideen標籤隱藏的屬性,在CSDN中有三個隱藏標籤,lt,execution,_eventId //注意這三個標籤是動態的比可以寫死web
3.POST數據分析:編程
1.構造屬於hearder,同時大部分網站登陸須要cookie,必須設置cookie處理器暴走cookie,使用Session模塊會自動將cookies保存,會自動將數據保存,Session可以自動保持其中會話過程(學習Java中網絡編程),在登陸CSDN過程當中有Js編寫出來的jsessionid動態的網頁密碼,在訪問過程當中要將其加入到URL+‘;’+'jsessionid'形式。服務器
可是此爬蟲過程當中沒有圖片或者驗證碼之類的東西,還須要深刻研究。。。。下節再看cookie
1 #----coding-GBK---- 2 3 import requests 4 from lxml import html 5 import re 6 7 Username="XXXXXX" 8 PassWord="XXXXXXX" 9 10 url="https://passport.csdn.net/account/login" 11 def craw_csdn(): 12 s=requests.Session() 13 datas={'username':Username,'password':PassWord} 14 head={'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'} 15 16 b=s.post(url,data=datas) 17 ##print (b.text) 18 tree=html.fromstring(b.text) 19 lt=list(set(tree.xpath("//input[@name='lt']/@value")))[0] 20 21 execution=list(set(tree.xpath("//input[@name='execution']/@value")))[0] 22 23 eventid=list(set(tree.xpath("//input[@name='_eventId']/@value")))[0] 24 jsessionid=list(set(tree.xpath("//link/@href")))[0] 25 jsessionid=str(re.findall('jsessionid=(.*)',jsessionid)[0]) 26 27 post_url=url+';'+'jsessionid='+jsessionid 28 print (post_url) 29 payload={ 30 'username':Username, 31 'password':PassWord, 32 'lt':lt, 33 'execution':execution, 34 '_eventId':eventid 35 } 36 37 agent='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0' 38 head={ 39 'Accept':"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 40 'User-Agent':agent, 41 'Host':'passport.csdn.net', 42 'Referer':'https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn', 43 44 } 45 r=s.post(post_url,data=payload,headers=head) 46 print(r.text)
if __name__=="__main__": 47 craw_csdn()
結果顯示出來登陸的是CSDN中HTML還要web流程中深刻挖掘其餘的東西:網絡
4.網易雲課堂上第二課爬取到的第二關的代碼:session
1 #--coding:utf-8----- 2 #!/usr/bin/env python 3 import requests 4 from lxml import html 5 from _cffi_backend import string 6 7 url='http://www.heibanke.com/accounts/login' 8 logurl='http://www.heibanke.com/lesson/crawler_ex02/' 9 10 ##採用嘗試方式發送數據獲得其中cirf值 11 def post_data_url(s,url,data): 12 b=s.get(url) 13 14 tree=html.fromstring(b.text) 15 auth_token=list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0] 16 print auth_token 17 18 ##使用這句話將cookies保存下來 19 params={'csrfmiddlewaretoken':b.cookies.get('csrftoken')} 20 params.update(data)##將csrf加入到payload中 21 22 r=s.post(url,data=params)##post向服務器發送的請求 23 return r,s 24 25 s=requests.Session() 26 payload={ 27 'username':'test', 28 'password':'test123' 29 } 30 r,s=post_data_url(s,url,payload) 31 32 print r.status_code 33 34 for i in range(30): 35 rr,s=post_data_url(s,logurl,{'username':'heibanke','password':str(i)}) 36 if rr.text.find(u'錯誤')>0: 37 print i,"no correct" 38 i+=1 39 else: 40 print rr.text 41 break 42 43
5.模擬登陸CSDN的時候,採用requests_Session()模塊,採用httpfix抓取:app
從其中獲得的信息中:post數據包,同時發現post 的url中有一段就jessionId的動態碼,在python書寫過程當中必需要將其加入到url中同時獲得post數據包提交的方法:less
post -Data:
紅色箭頭表示post的url,發現自動加上jessionid的東西