爬蟲實例(一):模擬登陸CSDN

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的東西

相關文章
相關標籤/搜索