模擬登陸php
爲何要進行模擬登陸 - 有時候咱們要進行登陸以後,才能爬取到的數據 爲何要識別驗證碼 - 驗證碼每每是做爲登陸中發送的請求參數進行使用的 驗證碼識別: 藉助於一些線上打碼平臺(超級鷹,雲打碼,打碼兔) 超級鷹的使用流程: - 註冊:註冊一個<用戶中心>身份的帳號 - 登陸:基於<用戶中心>進行登陸 - 點擊 軟件ID -->生成一個軟件id - 下載示例代碼:點擊開發文檔->選擇python語言->點擊下載 代理操做 cookle操做 線程池
實例:(這裏使用的是超級鷹的打碼平臺)html
import requests from lxml import etree headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' } import requests from hashlib import md5 class Chaojiying_Client(object): def __init__(self, username, password, soft_id): self.username = username password = password.encode('utf8') self.password = md5(password).hexdigest() self.soft_id = soft_id self.base_params = { 'user': self.username, 'pass2': self.password, 'softid': self.soft_id, } self.headers = { 'Connection': 'Keep-Alive', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)', } def PostPic(self, im, codetype): """ im: 圖片字節 codetype: 題目類型 參考 http://www.chaojiying.com/price.html """ params = { 'codetype': codetype, } params.update(self.base_params) files = {'userfile': ('ccc.jpg', im)} r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers) return r.json() def ReportError(self, im_id): """ im_id:報錯題目的圖片ID """ params = { 'id': im_id, } params.update(self.base_params) r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers) return r.json() def get_codeImg_text(imgPath,imgType): chaojiying = Chaojiying_Client('zty1304368100', 'zty130436', '899993') #用戶中心>>軟件ID 生成一個替換 96001 im = open(imgPath, 'rb').read()#本地圖片文件路徑 來替換 a.jpg 有時WIN系統需要// return chaojiying.PostPic(im, imgType)['pic_str'] session=requests.Session() url='https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx' page_text=session.get(url=url,headers=headers).text tree=etree.HTML(page_text) img_src='https://so.gushiwen.org'+tree.xpath('//img[@id="imgCode"]/@src')[0] img_info=session.get(url=img_src,headers=headers).content with open('./code.jpg','wb') as fp: fp.write(img_info) #識別二維碼 code_img_text=get_codeImg_text('./code.jpg',1902) print(code_img_text) __VIEWSTATE=tree.xpath('//input[@id="__VIEWSTATE"]/@value')[0] __VIEWSTATEGENERATOR=tree.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0] login_url='https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx' data={ '__VIEWSTATE':__VIEWSTATE , '__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR, 'from': 'http://so.gushiwen.org/user/collect.aspx', 'email': 'www.zhangbowudi@qq.com', 'pwd': 'bobo328410948', 'code': code_img_text, 'denglu': '登陸', } page_info=session.post(url=login_url,data=data,headers=headers).text with open('./gsw.html','w',encoding='utf-8') as f: f.write(page_info)
技術點:python
如何使用超級鷹的打碼平臺
如何獲取驗證碼的圖片?如何使用超級鷹將驗證碼圖片識別成字符串的形式
標籤訂位,數據提取
處理動態參數
傳送數據時傳送cookie值
session=requests.Session()