Python模擬登陸實戰(一)

今天,學習了模擬登陸新浪微博。模擬登陸主要有兩種方式,1、利用Cookie;2、模仿瀏覽器的請求,發送表單。php

法一:html

Cookie:指某些網站爲了辨別用戶身份而儲存在用戶本地終端上的數據(一般通過加密)。當登陸一個網站時,網站每每會要求用戶輸入用戶名和密碼,而且用戶能夠勾選「下次自動登陸」。若是勾選了,那麼下次訪問同一網站時,用戶會發現沒輸入用戶名和密碼就已經登陸了。這正是由於前一次登陸時,服務器發送了包含登陸憑據(用戶名加密碼的某種加密形式)的Cookie到用戶的硬盤上。第二次登陸時,(若是該Cookie還沒有到期)瀏覽器會發送該Cookie,服務器驗證憑據,因而沒必要輸入用戶名和密碼就讓用戶登陸了。python

代碼格式以下:瀏覽器

cookie = {'Cookie' : ''}
html = requests.get(url,cookies=cookie)

法二:服務器

經過模擬瀏覽器請求的方式來模擬登陸微博。cookie

一、先手動登陸微博,推薦移動端(PC端用戶名和密碼都進行了極其複雜的加密,不推薦)session

發現表單中‘password_xxxx,vk,capId’是不知道的,那就要經過分析原始登錄界面來獲取了。post

現將它們提交表單便可,代碼以下:學習

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 __author__ = 'ziv·chan'
 4 
 5 from lxml import etree
 6 from PIL import Image
 7 import requests
 8 import re
 9 
10 
11 user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'
12 referer = 'http://login.weibo.cn/login/?ns=1&revalid=2&backURL=http%3A%2F%2Fweibo.cn%2F&backTitle=%CE%A2%B2%A9&vt='
13 
14 headers = {
15         'User-Agent' : user_agent,
16         'Host' : 'login.weibo.cn',
17         'Origin' : 'http://login.weibo.cn',
18         'Referer' : referer
19 }
20 
21 session = requests.session()
22 
23 # 注意URL的選擇
24 url = 'https://login.weibo.cn/login/'
25 html = session.get(url,headers=headers)
26 pageCode = html.text
27 pattern = re.compile('password" name="(.*?)".*?name="vk" value="(.*?)".*?"capId" value="(.*?)"',re.S)
28 items = re.findall(pattern,pageCode)[0]
29 password,vk,capId = items
30 # 上面就依次得到了password_xxxx,vk,capId
31 
32 cap_url = 'http://weibo.cn/interface/f/ttt/captcha/show.php?cpt=' + items[2]
33 captcha = session.get(cap_url,headers=headers)
34 with open('cap.png','wb') as f:
35     f.write(captcha.content)
36     f.close()
37     im = Image.open('cap.png')
38     im.show()
39     im.close
40     cap_code = raw_input('請輸入驗證碼:')
41 
42 
43 form_data = {
44         'mobile' : '18362972928',
45         password : 'ChelseaFC.1',
46         'code' : cap_code,
47         'remember' : 'on',
48         'backURL' : 'http%3A%2F%2Fweibo.cn%2F',
49         'backTitle' : '微博',
50         'tryCount' : '',
51         'vk' : vk,
52         'capId' : capId,
53         'submit' : '登陸'
54 }
55 
56 
57 
58 session.post(url,data=form_data,headers=headers)
59 
60 url_logined = 'http://weibo.cn/'
61 html_2 = session.get(url_logined)
62 html_2.encoding = 'utf-8'
63 pageCode_2 = html_2.content
64 Selector = etree.HTML(pageCode_2)
65 content = Selector.xpath('//span[@class="ctt"]')
66 for each in content:
67     text = each.xpath('string(.)')
68     print text

以上。網站

相關文章
相關標籤/搜索