首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

python–爬虫–模拟登录全面介绍和简例–以抓取雅卓app为例)(5)

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()
返回列表