爬虫开发03--图片验证码和模拟登陆

本文详细介绍了如何应对图像验证码的识别,包括普通图片和点选图片坐标的识别,以图鉴平台为例,展示了实战操作。接着讨论了模拟登录,特别是使用Cookie解决二次请求获取数据的问题,通过人人网模拟登录案例,阐述了session会话对象在处理Cookie中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、图片验证码

图像验证码识别的干扰因素:增加识别难度

1、以图鉴为例,识别图像验证码

1)普通图片识别

2)点选图片坐标识别

2、实战练习

1)识别古诗文网登录页面中的验证码

二、模拟登陆

使用Cookie解决第2次请求(用户详情页请求)时,获取不到数据的问题:

请求中添加Cookie的方法:

1)手动添加Cookie

2)自动处理Cookie

1、需求:对人人网进行模拟登录,获取登录后的页面中的用户信息

1)判断请求页面是否成功

2)session会话对象发起请求:


一、图片验证码

 

图像验证码识别的干扰因素:增加识别难度

  1. 将待识别小图加复杂背景,并融合成一张无缝的图;
  2. 多用识别算法容易混淆的相似物品;
  3. 不断改变背景的模式和拼图的方法;
  4. 物品前景加一些干扰;
  5. 增加一些细分物体类别;
  6. 除物品识别外,引入属性识别要素;

 

1、以图鉴为例,识别图像验证码

最新开发文档:https://shimo.im/docs/yXJvpVQDRTpDxp8c/read

费用价格:http://www.ttshitu.com/price.html?spm=null

 

注册用户,充值1元;

1元可以做的事情:

  • 普通图片验证码识别:数字+英文混合,每次调用0.002元/次,可调用500次;
  • 点选图片坐标识别:1~4个点选坐标,每次调用0.016元/次,可调用62次;

 

1)普通图片识别

爬取网站:https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx

图片获取:登录页面,直接下载验证码图片到本地(下载后修改后缀为.jpg),4位数字+英文混合;

 

1>  下载图片到本地:RandCode.jpg

 

2>  图鉴获取图像验证码代码:get_image_code_local.py

  • 只需要修改为自己注册的图鉴的用户名myusername和密码mypassword即可运行;
  • result = base64_api(uname='myusername', pwd='mypassword', img=img_path, typeid=typeid)
# 图鉴平台,获取通用的图片验证码内容
import base64
import json
import requests

def base64_api(uname, pwd,  img, typeid):
    with open(img, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        b64 = base64_data.decode()
    data = {"username": uname, "password": pwd, "image": b64, "typeid": typeid}
    result = json.loads(requests.post("http://api.ttshitu.com/base64", json=data).text)
    print('图鉴返回的结果:', result)
    print('------------------------------------\n')
    if result['success']:
        return result["data"]["result"]
    else:
        return result["message"]
    return ""


if __name__ == "__main__":
    img_path = "./RandCode.jpg"
    typeid = '3'  # 3数英混合,0.002元/次,1元500次
    result = base64_api(uname='myusername', pwd='mypassword', img=img_path, typeid=typeid)
    print(result)

输出结果:8UZW

 

3>  查询图鉴平台余额代码:query_account_info.py

  • 修改为自己注册的图鉴的用户名myusername和密码mypassword
# 图鉴平台,查询余额
import json
import requests

def query_balance(uname, pwd):
    param = {"username": uname, "password": pwd}
    result = json.loads(requests.get("http://api.ttshitu.com/queryAccountInfo.json", params=param).text)
    print('图鉴返回的结果:', result)
    print('------------------------------------\n')
    if result['success']:
        return result["data"]
    else:
        return result["message"]
    return ""


if __name__ == "__main__":
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值