好了,咱們前面已經講解了怎麼找到登錄界面以及從登錄界面源碼中獲取驗證碼圖片的網址,咱們再來回顧一下前面設定的流程,並開始編寫代碼html
先手動登錄,在登錄過程當中找到post數據的內容,向哪一個網站post數據
python
使用urlopen 將登錄界面的源碼下載下來,並將驗證碼圖片的網址找出來api
點擊驗證碼的圖片找到要輸入的驗證碼,構建請求,加入post數據,並將全部數據發送到實際登錄的網站cookie
使用cookielib獲取cookies,並構造opener自動攜帶cookies訪問其餘的頁面post
#!/usr/bin/env python # -*- coding:UTF-8 -*- __author__ = "217小月月坑" ''' 驗證碼登錄try-1 ''' import urllib import urllib2 import re import cookielib # 獲取登錄界面的源碼並將驗證碼圖片的網址抽取出來 login_url = 'http://id.ifeng.com/allsite/login' headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0',} pattern = re.compile(r'<img src="(.*?)".*?',re.S) request = urllib2.Request(login_url,headers=headers) contents = urllib2.urlopen(request).read() items = re.findall(pattern,contents) for item in items: print item # 提示用戶輸入驗證碼 captcha = raw_input("請輸入驗證碼:") # 構造post數據 data = { 'u': 'xxxxxxxxxxxxxxx@qq.com', 'k': 'xxxxxxxxxxxxxxxxx', 'auth': captcha, 'auto': 'on', 'comfrom':'', 'type': '2', } post_data = urllib.urlencode(data) # 將post 信息發送到接受信息的網址 response = urllib2.urlopen("https://id.ifeng.com/api/sitelogin",post_data) print response.read() # cookies處理 cookieJar = cookielib.CookieJar() handler = urllib2.HTTPCookieProcessor(cookieJar) opener = urllib2.build_opener(handler) response2 = opener.open("http://blog.ifeng.com/16441366.html") print response2.read()
來看看結果網站
這又是爲何呢?ui