python–爬虫–模拟登录全面介绍和简例–以抓取雅卓app为例)(5)
- UID
- 1066743
|
python–爬虫–模拟登录全面介绍和简例–以抓取雅卓app为例)(5)
有验证码的抓取的思路
解决方法:
单机采集:
1.在启动采集后自己手动输入验证码;
2.在本地的浏览器先登录好账号在进行采集;
云采集:在登录账号后,记录登录账号cookie,再启动云采集。
手动输入验证码方案实现
登录流程
第一步获取验证码和相应cookies,
验证码的地址通过观察fiddler获得,这里不再赘述。
codeurl = 'http://www.pss-system.gov.cn/sipopublicsearch/portal/login-showPic.shtml'
valcode = requests.get(codeurl)
1
2
此处cookies已经保存在valcode.cookies中,接下来我们需要将valcode保存为图片。
f = open('valcode.png', 'wb')
# 将response的二进制内容写入到文件中
f.write(valcode.content)
# 关闭文件流对象
f.close()
保存图片之后,鉴于技术问题暂时还没有做机器识别,只能用人眼识别了。得知验证码结果后我们Input进来。
code = input('请输入验证码:')
data["j_validation_code"] = str(code)
第二步发送登录请求
通过观察network我们发现登录请求所带的参数格式如下:
data = {
"j_loginsuccess_url": "",
"j_validation_code": "",
"j_username": base64Name,
"j_password": base64Pass
}
这里用户名和密码已经通过base64加密,python中有现成的base64解码编码模块,直接import进来用就可以,笔者不再赘述。
checkUrl = 'http://www.pss-system.gov.cn/sipopublicsearch/wee/platform/wee_security_check'
resp = requests.post(checkUrl, headers = checkHeader, cookies = requests.utils.dict_from_cookiejar(valcode.cookies), data=data)
完整代码参考:
Url_1 = 'http://passport2.chaoxing.com/num/code?1515388254551'#验证码地址
Url_2 = 'http://passport2.chaoxing.com/login?refer=http%3A%2F%2Fi.mooc.chaoxing.com'#登录地址
temp = open("valcode.png","wb")
temp.write(valcode.content)
temp.close()
valc = input("输入验证码:")
form["numcode"]=str(valc)
resp = browser.post(Url_2, headers = headers,data=form)
#把返回的页面写入temp_1.html
temp = open("temp_1.html","wb")
temp.write(resp.content)
temp.close() |
|
|
|
|
|