目录
使用Cookie解决第2次请求(用户详情页请求)时,获取不到数据的问题:
1、需求:对人人网进行模拟登录,获取登录后的页面中的用户信息
一、图片验证码
- 一种反爬机制;
- 图片识别平台:
- 云打码:http://www.yundama.com/
- 图鉴(便宜):http://www.ttshitu.com/
- 超级鹰(贵):http://www.chaojiying.com/
图像验证码识别的干扰因素:增加识别难度
- 将待识别小图加复杂背景,并融合成一张无缝的图;
- 多用识别算法容易混淆的相似物品;
- 不断改变背景的模式和拼图的方法;
- 物品前景加一些干扰;
- 增加一些细分物体类别;
- 除物品识别外,引入属性识别要素;
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__":